アフター・ビットコイン:ブロックチェーン技術の何がすごいのか?

今回は、「アフター・ビットコイン―仮想通貨とブロックチェーンの次なる覇者―」の本の感想です。

結構前に購入していて、読もうと思ったきっかけをすでに忘れてしまったのですが、確か、たまたま読んでいたブログで、「ビットコインが無条件に礼賛されている風潮があるけど、実際のところブロックチェーンが通過の未来を変えうるかに関して、デメリットも踏まえて説明されていてよかった」というような内容を見て、読んでみようかなと思ったのがきっかけだったように思います。

実際に読んでみて、ブロックチェーンの技術も含めて、ビットコインのメリット・デメリットに関して、詳しく述べられていてとても良い本だなと思ったので、要約がてら紹介します。

ちなみに、かなり質量ともにボリュームのある本なので、読む方は覚悟して下さい^^;;
全7章で構成されていて
・第1,2章がビットコインに関する内容
・第3章以降がブロックチェーンの技術と金融・証券分野における応用と取り組みの事例

となっています。第3章以降は、金融分野や証券分野でブロックチェーンに携わっている人・サービスを開発している人以外にとっては細かすぎる印象があったので、ここでは第1・2章を、一部、説明情報を付け加えて要約します。


ビットコインとは?
仮想通貨の一種で、紙幣やコインといった目に見える物理的な存在で価値の受け渡しや商品との交換が行われるのではなく、あくまでも単なるデータがコンピューター上でやりとりされる。

ビットコインを支える暗号技術とは?
円やドルなどの貨幣は、特殊な印刷技術(特殊インク、すかし、ホログラムなど)によって偽造を防止しているが、ビットコインの場合はどのような対策を取っているのか?ビットコインはデジタル通貨なので、youtubeの違法ダウンロードのようにすぐにコピーされてしまい、コインの不正な複製問題が生じる危険性がある。

デジタル・データの場合には悪用として下記の2つの問題があり、ビットコインでは「デジタル署名」と「PoW(Proof of Work:取引の承認)を用いたブロックチェーン技術」によって対策を行っている。
1)二重使用(double spending):同じデータを使って2度目の支払いを行うこと
2)偽造:偽のデータにより支払いを行うこと


【デジタル署名】
デジタル署名は、電子的な記録に対して行われる電子的な署名のことであり、紙の書類における署名や捺印に相当するような機能を果たす。

AがBにビットコインを送る場合、Aはビットコインの送金額に、Aのデジタル署名をつけて送る。受け取ったBは、Aのデジタル署名を受け取った後は、改ざんしたり、なかったものに消去したりすることはできない(これは、デジタル署名が、ハッシュ関数と呼ばれる一方向性の関数をもとにしていることによる)。
具体的には、素数の積の数を素因数分解することは現代の数学では容易ではない(総当たり方式でしらみつぶしに計算するしかない)ことによる。

例えば11×13=143であるが、これを素因数分解するうのはけっこう手間がかかる。中学校で習った「まず2で割り切れるかどうかを確かめ、次に3で割り切れるかどうかを確かめて…」という、小さい素数から順番に割ってみていくしか方法がないからである。しかし、逆方向である素数の積「11×13」を計算することはさほど難しくない。

この例でいくと、Aは(11, 13)というデジタル署名(秘密鍵)を持っていて、50ビットコインをBに送るときに(11, 13)という署名をする。受け取る際には143と、50ビットコインの情報がBに届き、Bは143という情報(公開鍵)しか知らないが、143という数字を使って50ビットコインをAから受け取ったという情報を開封することができる。このとき、BはAの秘密鍵である(11, 13)は知らない。
(詳しく知りたい方は、「公開鍵暗号方式」でググってください。一方向関数について簡単に知りたい方には、こちらのテトリスの例の記事が分かりやすいです。)

ハッシュ関数

この、受取人は、デジタルデータの改竄や消去が容易にできない点が1つポイント。ただ、これだけでは、ビットコインの二重使用問題が解決されず、銀行や造幣局といった中央集権的な管理が必要になる。

デジタル署名は、ビットコインを受け取ったBが、受け取ったビットコインを改竄したり、なかったものにしたりすることを防止する技術であり、後述するAが悪意を持って同じコインをBとCに送るケースには対応していない。

デジタルデータの二重使用問題を解決するために、PoW(Proof of Work:取引の承認)システムを搭載したブロックチェーン技術が登場する。


【ブロックチェーンとPoW(Proof of Work:取引の承認)】
ブロックチェーンとは、「ブロック」と呼ばれる取引データの固まりを一定時間ごとに生成し、時系列的に鎖(チェーン) のようにつなげていくことにより、データを保管するデータベースの技術。

例えば、AがBに50ビットコインを送り、その直後にCに同じ50ビットコインを送った場合、どちらが正しい取引かを判定する必要がある。ここに管理者が何も介在しない場合には、BやCはAが同じコインを送ったか、違うコインを送ったかを判定することができない。現金手渡しの場合には、こうした問題はないが、振込やデジタル通貨の場合には起こり得る。

この二重使用問題に対し、今までは銀行が中央集権的に管理していた。具体的には、先ほどの例の場合、Bに50ビットコインを送る時点で銀行がその取引を確認し、次にAがCに送る場合には、同じ50ビットコインは送ることができないように、新しいコインを発行していた。LINE PayやWeChat Payは、個人間で送金できているじゃんと思われるかもしれないが、この場合もLINEやテンセントが利用者の口座を中央集権的に管理し、AがBに50ビットコインを送金した場合には、Aの口座残高は50ビットコイン減り、Bの口座残高は50ビットコイン増えている。

しかし、これだと中央集権的な管理者を信頼するという前提でないと成り立たない(企業でも内部の経理が粉飾するケースはあり、国や銀行だからといって100%信用できるわけではない)

この問題に対して、数学的に解決したのがPoWというシステム。
先ほどの例で考えると、まずAがBに50ビットコインを送ったとする。送った段階では、この取引は承認されず宙ぶらりんな状態である。そして、先ほどの一方向性関数問題を解く(143という数字が与えられて、11と13を見つけ出す)という単純な計算(注)を行い(この計算をパソコンのCPUを使って行う人達が、マイナーと呼ばれる人達)、この取引が承認される。この承認された取引は、その前の取引(ブロック:例えばDがAに20ビットコイン送った、EがAに30ビットコイン送ったなど)に紐づく形で鎖状に繋がって記録される。

(注:正確には、「前ブロックのハッシュ値+取引データ」をもとに、次のブロックのハッシュ値が「先頭に一定の数以上のゼロが連続して並んでいる」ような値を求めるという、計算を行いますが、ややこしくなるので割愛。パソコンのCPUを使う総当たり方式でしかアプローチできないのがポイント。抜け道で簡単に解けるような暗号ではなく、地道に0, 1, 2, 3と候補となる数値を当てはめて計算するしかない)


AがBに50ビットコインを送ったとして
1)Bが50ビットコインを受け取る(この取引が承認される)前に、AがCに50ビットコインを送った場合
「A→B(50ビットコイン)」「A→C(50ビットコイン)」この2つの取引は未承認のままの状態であり、どちらかの取引の一方向性関数問題を早く解けた方(承認された方)の取引のみが承認され、もう片方の取引は承認されずに終わる

2)Bが50ビットコインを受け取った(この取引が承認された)後に、Aがその取引を改竄しようとした場合
「A→B(50ビットコイン)」の取引の後に、すでにいくつもの取引が承認されて、鎖状に繋がっていて、「A→B(50ビットコイン)」の取引を改竄すると、そのあとの取引も全て変更されてしまうため、Aは「A→B(50ビットコイン)」にすでに承認されている全ての取引を改竄しないといけなくなる。この改竄はCPUに依存しているので1人の悪意あるものが、全ての取引を改竄するのは現実的に不可能

仮に、悪意の攻撃者がビットコインを偽造しようとしたものとします。ビットコインの偽造とは、ビットコインの取引データを改ざんすることですので、それに基づくハッシュ値も変わり、ナンス値を再計算しなければなりません。そして、偽造したデータを正当なものとするためには、次のブロックのプルーフ・オブ・ワークも再計算し、さらには次のブロックのナンス値も再計算して……という形で、最新のブロックまで改ざんし続けることが必要になります。そのためには、膨大な作業量が必要になり、世界中の計算者の計算能力をすべて合わせた高い計算能力(コンピュータの処理能力) を持つことが必要となります。

チェーン上の過去の取引データを改ざんしようとすると、その時点から最新のブロックまでをすべて改ざんしなければならないため、過去の取引の改ざんが困難となります。

多数の善意の計算者がいる世界では、悪意の攻撃者による再計算は、正しい取引の承認のスピードに追い付くことはできず、偽造が極めて困難になる

この一文が、最もよくビットコインの根幹技術を表していると思いました。
ビットコインのデメリット(マイニングのインセンティブ設計の問題・高い匿名性・発行上限問題など)についても記載する予定でしたが、ビットコインの暗号技術だけで結構な分量になってしまいましたので、デメリットに関しては次回。
ちなみにこちらが、ナカモトサトシさんの原著論文です。数学の知識のある方は、原著を読む方がよっぽど早く理解できるかと思います。

また、こちらのyoutubeの動画も分かりやすいです。英語ですが、興味ある人は見てみて下さい