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

クラウド/Webサービス

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

第3回 二重使用問題とトランザクション
オージス総研
樋口 匡俊
2019年4月23日

今回はビットコイン論文の第2章「Transactions」を読みながら、二重使用問題とトランザクションについて見ていきます。また、今回から少し具体的なビットコインの仕組みの説明に入るのですが、前提知識として、ビットコイン以前の電子マネーの概要についても説明します。

あらためて、ビットコイン論文とは何か?

ビットコイン論文とは、第1回でとり上げた P2P について説明する論文ではありません。第2回のトラストや非中央集権についての論文でもありません。

文字通りビットコインの全容を明らかにする論文かというと、そうでもありません。後にサトシも認めているように、「機能的な細かいことは論文に書いていない (The functional details are not covered in the paper)」のです。

ブロックチェーンの論文である、ともちょっと言えません。ビットコイン論文には、ブロックチェーン (blockchain) という単語は一度も登場しません。※1

ビットコイン論文とは、二重使用問題の解決法を説明する論文です。そのことは、第1章「Introduction」にはっきりと書いてあります。

In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.

この論文では、二重使用問題の解決法を提案する。その解決法は、P2P分散タイムスタンプサーバーを用いて、取引が生じた順番の計算機的な証明を生成するものである。

初めて見る言葉がならんでいますが、それぞれこの後の論文の章立てに関わってくる言葉です。

「二重使用問題」については、今回読む第2章「Transactions」で解決への道筋が示されます。「タイムスタンプサーバー」については第3章「Timestamp Server」で、「計算機的な証明」は第4章「Proof-of-Work」でそれぞれ説明されます。二重使用問題の解決法を順序よく説明できるように章立てがなされていることが見てとれますね。

ところが論文には、解決法が書かれているだけで、二重使用問題そのものについての説明はありません。そこで第2章を読む前に、前提知識として、ビットコイン以前の電子マネーについて見ていくことにしましょう。

電子マネーの基本モデル

これから説明することの多くは、NSA (アメリカ国家安全保障局) のエッセイ「How to Make a Mint: The Cryptography of Anonymous Electronic Cash」に依ります。1990年代後半に発表されたこのエッセイには、80年代からデイヴィッド・チョウム (David Chaum) らを中心に発展した電子マネー (electronic cash) の概要が分かりやすくまとめられています。※2

エッセイによると、電子マネーを利用するときは、次の三つの手順を踏むことになります。

  1. 引出 (withdrawal)
  2. 支払 (payment)
  3. 預入 (deposit)

登場人物は三人です。

  1. 支払人 (payer) または 消費者 (consumer)
  2. 受取人 (payee) または 小売商 (merchant)
  3. 金融ネットワーク (financial network)

例として、支払人がアリス、受取人がボブ、金融ネットワークが銀行であるとします。

電子マネーの基本モデル

はじめに、アリスは銀行から電子マネーを引き出します。電子マネーの元手になるのは、アリスの銀行口座に入っている円やドルです。次いでアリスは電子マネーをボブに支払います。するとボブは受け取った電子マネーを銀行に預け入れます。銀行は預け入れられた電子マネーに基づき、ボブの口座の円やドルを増やします。

この 引出 → 支払 → 預入 という一連の流れが、電子マネーの基本的なモデルです。

電子マネーにおける「コイン」

エッセイによると、電子商取引 (electronic commerce) とは、電子的な情報の伝達をともなう金銭的な取引のことを指します。

伝達される情報のひとつひとつのまとまりをトークン (token) と言います。情報であるトークンの実体は、0 と 1 が並んだビット列です。そんな 0 と 1 の固まりにすぎないトークンを用いて支払を行うのが電子決済 (electronic payment) です。

電子決済において、トークンはしばしばコイン (coin) と呼ばれます ※3 。要するに電子マネーの世界において、コインとは金属の硬貨ではなく単なるデータであり、データのやりとりを支払とみなしているというわけです。

これといった対策を講じなければ、データを加工・複製して不正を行うことは、金属よりもはるかに簡単です。そんなデータとしてのコインの問題と対策が、エッセイには二つ挙げられています。

コインの問題と対策① 偽造

コインの偽造 (forgery) ※4 とは、「本物」に見えるコインを勝手に作ることです。銀行口座に入っている円やドルの裏付けがない「偽物」のコインを作り、支払や預入で不正を働くのです。

対策として、エッセイはデジタル署名を挙げています。IPA (独立行政法人情報処理推進機構) によると、デジタル署名とは「公開鍵暗号方式を利用したもので、メッセージの発信者の認証と改ざんの検知が可能なもの」です。つまり、ある人があるデータを作成したことを検証できる技術です。

例えば、銀行がコインにデジタル署名を行えば、そのコインを発行したのはたしかにその銀行であり、他の誰かが勝手に作り上げたり書き換えたりしていないことが検証できるようになります。

コインの問題と対策② 多重使用

コインの多重使用 (multiple spending) とは、同じコインを繰り返し使うことです。「偽物」を作り上げるのではなく、一回しか使えないはずの「本物」を何回も何回も使うので「多重」と言います。

多重使用

対策として、エッセイは使用済みコインのデータベースを挙げています。データベースを管理し、多重使用の検査を行うのは銀行です。

例えば、ボブがコインを預け入れようとしたら、銀行はデータベースと照らし合わせて、使用済みの場合は預入を拒否します。未使用であれば預入を受け入れ、そのコインは使用済みとしてデータベースに記録します。

この多重使用の別名が二重使用 (double spending) ※5 です。以下では、多重使用のかわりに二重使用という用語を用いますが、使われる回数は二回までとは限らず、何回でもありうることに注意してください。

二重使用対策とオンライン支払/オフライン支払

使用済みコインのデータベースは、二重使用対策として万能ではありません。これについて、電子マネーの基本モデルをオンライン支払とオフライン支払に分けて見てみましょう。

オンライン支払 (on-line payment) とは、支払を受け入れる前に銀行に問い合わせて、コインに問題が無いか検査してもらう支払方式のことです。支払のたびに銀行と通信回線でつながるのでオンラインと言います。

問合せの結果、もし二重使用が発覚したら、支払を受け入れず商品も渡しません。問題がなければ、コインを預け入れて商品を渡します。このように、オンライン支払では支払と預入が一続きの手順として処理されます。エッセイでは、オンライン支払においては使用済みコインのデータベースによる対策が有効とされています。

オフライン支払 (off-line payment) とは、支払を受け入れた後、しばらくしてから預入を行う支払方式のことです。支払を受け入れてもすぐには銀行と通信回線でつながらないのでオフラインと言います。

オフライン支払には、支払のたびに銀行とやりとりする必要がないというメリットがあります。また、預入を行えば、使用済みコインのデータベースを用いて、二重使用が行われたことを検知 (detection) することもできます。

しかし、二重使用を検知したところで、すでに商品は渡し終わっています。オフライン支払において、使用済みコインのデータベースは、二重使用を行おうとした人を撃退する予防 (prevention) 策とはなりません。

検知ができて、犯人も特定できたとしたら、何らかの制裁やペナルティーを科すことができます。その意味で、使用済みコインのデータベースは二重使用を思いとどまらせる警告 (precaution) にはなります。しかし、危険は承知の上で二重使用されてしまえば防ぎようがありません。そこで、オフライン支払でも予防ができる対策を別途考える必要があります

エッセイは、物理的な対策として改ざん (tamper) に耐えうるモノ、すなわち耐タンパー性 (tamper-resistant) のあるカードや装置を挙げています。加工・複製が困難なカードの使用を強制できれば、そのカードにコインの使用状況を記録し、使用済みのコインは二度と使えないようにできるというわけです。

コインの譲渡可能性

最後にもう一つ、電子マネーの基本モデルを拡張し、コインに譲渡可能性 (transferability, 転々流通性) を与えるモデルについて説明します。

譲渡可能性

譲渡可能性のないコインは、オンライン支払でもオフライン支払でも、一度支払で受け取ったらそれ以上は使用できず、銀行に預け入れることになります。

譲渡可能性のあるコインは、支払で受け取ったコインを銀行に預け入れることなく、別の支払に使用できます。その場合、支払という用語のかわりに譲渡 (transfer) という用語を使います。

上の図では アリス → テッド → キャロル は譲渡で、キャロル → ボブ だけが支払となっていますね。理由は、ボブが受け取ったコインを銀行に預け入れているからです。

このように、譲渡は銀行とやりとりしませんのでオフライン支払の一種です。そのため、譲渡されるコインには二重使用のリスクがつきまといます。二重使用の検知だけなら使用済みコインのデータベースで可能ですが、予防を行うのであればやはり物理的対策が必要になります。

NSA のエッセイに基づく電子マネーの説明はここまでです。以上を踏まえて、第2章「Transactions」を読み進めていきましょう。

デジタル署名のチェーン

第2章「Transactions」は、コインを定義することからはじまります。

We define an electronic coin as a chain of digital signatures.

本論文では、電子コインをデジタル署名のチェーンと定義する。

デジタル署名のチェーン

連載三回目にして、ついにチェーンという言葉が出てきました!チェーンのような図も出てきました!

けれども、これはブロックのチェーンではありません

これはデジタル署名のチェーンです。図のように、デジタル署名は後述するトランザクション (transaction) の中に含まれますので、トランザクションのチェーンと言ってもよいでしょう。

デジタル署名は、NSA のエッセイがコインの偽造対策として挙げていましたね。ブロックチェーンは「改ざんに強い」とよく言われますが、ブロックを導入するまでもなく、このコインは定義からして改ざんに強いのだろうと想像できます。※6

コインの譲渡

Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.

各所有者は、一つ前のトランザクションおよび次の所有者の公開鍵のハッシュに対しデジタルに署名しコインの最後に付け加えることで、次の所有者へコインを譲渡する。受取人は、所有権のチェーンを証明してくれるそれらの署名を検証できる。

先ほどの図には、銀行が描かれていません。このままですと、このコインは支払と預入を行えない、永久に譲渡し続けるコインであり、オフライン支払の一種ということになります。※7

コインを譲渡するには、デジタル署名を「コインの最後に付け加える」、つまりデジタル署名のチェーンを伸ばしていくのだそうです。※8

署名する対象は二つ挙げられています。

一つ目のトランザクション (transaction) とは、コインをいくら譲渡するか等、取引の内容を記録したデータのことです。本連載ではこれまで「transaction」を実世界の経済活動という意味で「取引」と訳してきましたが、このようにビットコインのデータ構造という意味では「トランザクション」と訳すことにします。

もう一つの公開鍵 (public key)秘密鍵 (private key) と対になっています。秘密鍵を用いて署名を行い (sign)、対になる公開鍵を用いてその署名の検証を行います (verify)。

なぜこれでコインを譲渡したことになるのでしょうか。以下、先ほどの図を日本語で描き直した図で説明します。

デジタル署名のチェーン日本語版

この図を読み解くには、公開鍵に注目しましょう。どの公開鍵がどのトランザクションに含まれているのかがポイントです。

所有者1の公開鍵1は、トランザクションAにありますね。この公開鍵1は、次のトランザクションBにある署名1を検証しています。

もしも、署名1が偽物だったらどうなるでしょうか。公開鍵1による検証で、偽物だとばれてしまいますね。署名1が偽物であれば、それを含むトランザクションBを受け入れるわけにはいきません。

トランザクションBが受け入れられないということは、チェーンを伸ばせず、コインの譲渡ができないということです。チェーンを伸ばしたければ、トランザクションBには本物の署名1がなければなりません。

本物の署名1を作れるのは、所有者1の秘密鍵1だけです。秘密鍵1は所有者1以外の人は知りません。よって、本物の署名1を作ってチェーンを伸ばせるのは、所有者1しかいません※9

所有者1がチェーンを伸ばすとき、トランザクションBにはコインの受取人である所有者2の公開鍵2を含めておきます。すると今度は、本物の署名2を作ってチェーンを伸ばせる人、つまりコインを譲渡できる人は所有者2だけになります。

このように公開鍵は、あるトランザクションにおいてコインを譲渡された人でありかつ次にコインを譲渡できる人、すなわちコインの所有者 (owner) を表しているとみなせるでしょう。

コインの所有権

ところで、先ほど「ownership」を「所有権」と訳しましたが、法律的な意味でのビットコインの所有権は一度否定されています。

2015年8月6日付日本経済新聞電子版は「ビットコイン「所有権なし」 東京地裁、利用男性の請求棄却」と報じています。記事によると、「所有権は民法上、液体や気体など空間の一部を占める「有体物」で、排他的に支配できるものを対象としている」、「ビットコインに有体性がないのは明らか」として、「「ビットコインは所有権の対象とならない」との判断を示し請求を棄却」しました。

つまり、ビットコインはモノではないので、モノに対する権利である所有権は認められないというわけです。

とはいえ、ビットコインやブロックチェーンを法律的にどう扱うかは、まだ議論が行われている最中です。ここでは、技術だけでなく法律もブロックチェーンの活用に深く関わってくるのだ、ということを認識するにとどめて、先へ進むことにしましょう。※10

よくある二重使用問題の解決法

さて、偽造問題はデジタル署名で解決できたとして、もう一つ問題が残っています。

The problem of course is the payee can’t verify that one of the owners did not double-spend the coin.

問題はもちろん、所有者のうちのだれかがコインを二重使用しなかったということを、受取人が検証できないことである。

もちろん問題は二重使用です。

A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent.

よくある解決法は、すべての取引について二重使用の検査を行ってくれる、信頼できる中央当局か貨幣鋳造所を導入することである。取引のあとつどつど、新しいコインを発行してくれる貨幣鋳造所までコインを返却しなければならず、貨幣鋳造所が直接発行したコインだけが二重使用されていないと信じられる。

つどつど二重使用の検査を行うので、これはずばり電子マネーでいうオンライン支払のことですね。あとでまとめて預入を行うオフライン支払ではありません。この例では銀行ではなく、貨幣鋳造所 (mint, 造幣局) が検査を行うとされています。

The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank.

この解決法の問題は、お金のシステム全体の運命が貨幣鋳造所を運営する集団に依存していることである。すべての取引は貨幣鋳造所を通さなければならない。まるで銀行のように。

第1章のように、TTP である貨幣鋳造所には弱点があると言いたいようです。

では、貨幣鋳造所を通さないで支払を行うとどうなるでしょうか。それは先ほども述べたとおり、永久に譲渡し続けるオフライン支払の一種とみなせます。

NSA のエッセイでは、オフライン支払で二重使用を予防するには物理的対策が必要とされていました。しかしビットコイン論文では、物理的対策は検討対象外のようです。だとすると、このままでは二重使用を予防することは不可能ということになります。

二重使用問題の解決法を考える

貨幣鋳造所を通さずに二重使用問題を解決したい。そのために必要なことは何か。サトシは順を追って考えていきます。

We need a way for the payee to know that the previous owners did not sign any earlier transactions.

以前の所有者たちがいずれも二番目以降のトランザクションに署名していないことを、受取人が知ることができる方法が必要だ。

警戒すべきは、直接自分にコインを譲渡してくれる所有者だけではありません。コインは所有者から所有者へ譲渡されるので、途中の誰かが二重使用にひっかかっていたら、そのあとの人たちもみな二重使用の被害者となってしまいます。そのため、途中の誰も二重使用にひっかかっていないことを、受取人は知る必要があるのです。※11

For our purposes, the earliest transaction is the one that counts, so we don’t care about later attempts to double-spend.

そのためには、一番最初のトランザクションこそが重要であるから、その後の二重使用の試みについては気にしない。

二重使用を試みる人がいると、トランザクションが複数作られ、それらの署名のいずれも、公開鍵による検証を通過してしまいます。

例えば下の図では、トランザクションAの次のトランザクションの候補として、B、C、Dの三つが作られます。これら三つのトランザクションの署名はいずれも正しいので、署名だけではどのトランザクションで署名のチェーンを伸ばしたらよいか決められないのです。

二重使用のトランザクション

こうなったとしても、一番最初に作られたトランザクションを正しいトランザクションとし、他のトランザクションは気にしないというわけです。

二重使用を試みてもペナルティーがないのであれば、何度でも繰り返し試みる人がいるのではないでしょうか。ちょっと心配な気もしますが、サトシに従いここでは気にしないことにしましょう。

The only way to confirm the absence of a transaction is to be aware of all transactions.

あるトランザクションが欠けていることを確かめるには、すべてのトランザクションについて知るよりほかない。

すべてのトランザクションについて知っている、つまり知らないトランザクションなど無い、と保証できる方法はあるのでしょうか?その問いもまた、ここでは気にしないことにしましょう。

In the mint based model, the mint was aware of all transactions and decided which arrived first.

貨幣鋳造所に基づくモデルでは、貨幣鋳造所がすべてのトランザクションについて知っており、どれが最も早く届いたかを判断していた。

すべてのトランザクションを知っているとできること、それはトランザクションの順番を判定することです。順番が分かれば、一番最初のトランザクションが分かり、それ以外は二重使用として拒否できる、貨幣鋳造所ならそれができる、というわけです。

ここまでのサトシの思考をまとめると、以下のようになります。

  • 二重使用問題を解決したい
  • そのためには、トランザクションの順番を知る必要がある
  • そのためには、トランザクションをすべて知る必要がある
  • 貨幣鋳造所は、トランザクションをすべて知っており、順番を知っている

しかし、サトシとしては TTP に依存するわけにはいかないので、貨幣鋳造所は導入できません。そうなると、貨幣鋳造所と同じようなことを行えるなにかを導入しよう、という考えに至るのは自然なことでしょう。

To accomplish this without a trusted party, transactions must be publicly announced, and we need a system for participants to agree on a single history of the order in which they were received.

これを信頼できる機関なしに成し遂げるには、トランザクションは公表されなければならないし、トランザクションを受け取った順番に関するただひとつの履歴について参加者が合意するためのシステムが必要である。

誰もが貨幣鋳造所のような二重使用の検査をできるようにするには、誰もがすべてのトランザクションを参照できるようにする (publicly announced) 必要があるというわけです。

しかし問題は、誰もが必ず同じように順番を判定するとは限らないということです。よって、検査に参加している人たちが、たったひとつの順番に合意できるような仕組みが必要だというわけです。

The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received.

受取人はトランザクションが発生するたびに、それが一番最初に受け取ったトランザクションであると多数派のノードが合意したことの証明が必要である。

受取人はコインを譲渡されたら、それが二重使用ではないことをつどつど証明してもらう必要があると言っています。

これはあたかも電子マネーでいうオンライン支払のようです。やはりオフライン支払のまま、物理的な対策なしに二重使用の予防はできないようです。

オンライン支払と異なるのは、支払のつど問い合わせる相手が、銀行や貨幣鋳造所などの金融ネットワークではなく、P2Pネットワークだという点です。そして、それを実現するにはデジタル署名だけでは足りず、いよいよブロックの登場となるわけです。

P2Pネットワークへの問合せ

ブロックチェーンへのアプローチ

以上のように、サトシはブロックを導入する前に、きちんと筋道を立てて考えようとしたことが分かります。はじめに二重使用という解決すべき問題を見定め、貨幣鋳造所のモデルという既存の解決法を踏まえて、自らの理想とする TTP に依存しない解決法を導き出したわけです。

その理屈が正しいかどうかはともかく、はじめからブロックチェーンありきでビットコインが生まれたわけではないのです。筆者としては、その一見当たり前のことに対し、ブロックチェーン・ブームの今こそあらためて目を向けたいと思っています。

米国 NIST (国立標準技術研究所) のレポート「Blockchain Technology Overview」によると、ブロックチェーンに取り組む組織のほとんどが、どこにでも適用できる技術ではないことにフラストレーションを感じていると言います。原因は、問題へのアプローチの仕方が「ブロックチェーンをどこかで使いたいけど、どこで使えますか? (we want to use blockchain somewhere, where can we do that?)」というものだからです。つまり、必要だと判断したからブロックチェーンを導入するのではなく、はじめからブロックチェーンありきで取り組んでいるケースが多いというわけです。そのようなアプローチの見直しを促そうと、レポートは、ブロックチェーンの適用対象を判断するためのフローチャートや、ネットに多数存在する「Do you need a blockchain?」というタイトルの記事を紹介しています。

ビットコイン論文や NIST のレポートが示してくれているのは、解決したい問題や自分たちの目指すところを見定め、それらに適切な技術を適用していくというアプローチです。ブロックチェーンの真に有用で革新的な事例というのは、そうした一見当たり前と思えるアプローチで、よくよく考え試行錯誤した末に、ようやく生まれてくるものなのではないでしょうか。

おわりに

今回は、第2章「Transactions」を読み進めてきました。また、前提知識として、NSA のエッセイに基づきビットコイン以前の電子マネーの概要についても説明しました。

電子マネーの二つの問題のうち、偽造問題の対策としてはデジタル署名が考えられます。二重使用問題の対策としては、オンライン支払では使用済みコインのデータベースが有効ですが、オフライン支払では物理的な対策が必要です。

ビットコインにおける「コイン」の定義は「デジタル署名のチェーン」ですので、ブロックを導入するまでもなく、ひとまず偽造問題は解決できるものとし、あとは二重使用問題の解決法を考えることになります。

貨幣鋳造所のような TTP を通さないのであれば、オフライン支払の一種とみなせるので、二重使用問題を予防するには物理的な対策が必要でしょう。

サトシは物理的な対策ではなく、電子マネーでいう金融ネットワークに相当するものとして P2Pネットワークを用い、複数人が二重使用を検査してただひとつの履歴に合意する仕組みが必要と結論づけました。そうして、第3章からいよいよブロックが登場するのですが、その説明は次回としたいと思います。


※1: 論文には「chain of blocks」という表現はありますが、「blockchain」という名前の概念を明示的に説明している箇所はありません。「chain of …」という表現は他に「chain of hash-based proof-of-work」「chain of digital signatures」「chain of ownership」があります。「block chain」という言葉は初期のソースコードのコメントに登場します。

※2: NSA のエッセイは陰謀論でとり上げられることがありますが、法律事務所経由で公開されており、機密文書ではありません。今回参照したのは、アメリカン大学のロー・レビューに掲載された版です。このエッセイとともに、日本語の資料としては、参考資料にも挙げた「電子マネーのプロトコル研究の動向」が参考になります。

※3: ビットコイン以前の電子マネーの文献を読んでいると、「token or coin」という表現をちらほら見かけます。両者の区別はそれほど厳密ではないようです。今回はとり上げませんが、仮想通貨の世界における「トークン」との違いについて考えてみると面白そうです。

※4: エッセイでは「coin forgery」ではなく「token forgery」という用語を用いています。

※5: 「double spending」は「二重支払」と訳されることも多いですが、本連載では「payment」と区別するため「使用」としています。

※6: 「想像」としたのは、論文の簡潔な記述だけでは偽造対策が十分機能するとは言い切れないからです。論文には、デジタル署名のチェーンにおけるハッシュや署名のアルゴリズム、スクリプト (Script) という検証で用いられる仕組みなどは書いてありません。おそらくサトシは、論文の主題である二重使用の解決法の説明に注力したかったのでしょう。今回の記事も、そうしたサトシの記述になるべく沿った形での説明を心がけています。

※7: 図にはチェーンの「はじまり」、つまりコインを発行する部分が描かれていませんが、コインの発行については第6章「Incentive」で説明されます。

※8: 「transfer」は「送金」と訳されることが多いですが、今回は「譲渡可能性 (transferability)」や「所有者 (owner)」「所有権 (ownership)」との対応を考慮し「譲渡」としました。

※9: 秘密鍵を知ってしまえば、本来の所有者でなくてもコインを譲渡できます。他人の秘密鍵を用いて自分の公開鍵に対し署名すれば、コインを「盗む」ことが可能です。

※10: ビットコイン/ブロックチェーンと法律をめぐる比較的最近の参考資料として、以下を挙げておきます。

※11: 候補となる二つのトランザクションを比べて一方より早い (earlier) のではだめで、候補となる全てのトランザクションの中で一番早く (earliest) なければならないのです。

参考資料