見出し画像

爺でもわかるブロックチェーン(2)

以下は2016年12月13日に私が以下のホームページに掲載した記事です。
https://officemoorea.wordpress.com/
最近、web3という文脈でブロックチェーンが注目されていることや、上記ホームページの更新ができていないことから、古い記事ですが、noteに転載します。

■4つの基礎知識


まずはナカモトサトシ白書の原文の概要部分を紹介

A Peer-to-Peer Electronic Cash System
Satoshi Nakamoto  October 31, 2008

A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending.
We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work.

たぶんよくわからないだろうから、日本語訳

純粋なP2P電子マネーによって、金融機関を通さない甲乙間の直接的オンライン取引が可能になる。電子署名は問題の一部を解決するが、依然信用できる第三者機関による二重使用予防が求めらため、その恩恵は失われる。当システムはP2P電子マネーにおける二重使用問題の解決を提案する。このネットワークは取引に、ハッシュベースの継続的なプルーフ・オブ・ワークチェーンにハッシュ値として更新日時を記録し、プルーフ・オブ・ワークをやり直さない限り変更できない履歴を作成する。最長である一連のチェーンは、取引履歴を証明するだけでなく、それがCPUパワーの最大のプールから発せられたことを証明する。大多数のCPUパワーがネットワークを攻撃していないノード(ネットワーク接続ポイント)によってコントロールされている限り最長のチェーンが作成され、攻撃者を凌ぐ。ネットワーク自体は最小限の構成でよい。メッセージは最善努力原則で送信され、ノードは自由にネットワークから離脱、再接続することができ、離脱していた間のイベントの証明として最長のプルーフ・オブ・ワークチェーンを受信する。

https://coincheck.com/blog/292

やっぱりわからない。。。。まずはこの論文を理解するために必要となる4つの基礎知識について解説する。

■基礎となる知識その1 P2P


P2PはPeer To Peerのこと。Peerというのは、年齢・地位・能力などが同等の者という意味で、全ての端末が対等の立場で通信する仕組みを意味する。これに対応する言葉は、クライアント・サーバーで、中央にサーバーがあり、これにクライアント端末がつながる仕組みである。
https://ja.wikipedia.org/wiki/Peer_to_Peer

インターネットでホームページを見たり、メールを送受信したりするときの仕組みはライアント・サーバー接続。パソコンからサーバーに接続してホームページ閲覧やメールのサービスを受けている。

一方P2Pの代表的なものと言えば、ファイル共有ソフトのNapster、WinMX、Winnyなど。Winnyは東京大学の金子さんが開発したソフト。これが映画ソフトなどの違法コピーを助長したという疑いで金子さんが逮捕されてしまう(のちに無罪確定)騒ぎがあり、P2Pは悪いものという風潮が広まってしまった。

しかしP2Pは「高スケーラビリティ」「低コスト」「耐障害性の高さ」という特徴を持ち、PCの能力とネット速度の高まりにより、今後ますます注目される技術になると考えられる。

P2Pの問題点は通信相手特定が難しいこと、これが違法な取引にとっては利点となり、得てしてブラックな使われかたになりやすい。

■基礎となる知識その2 ハッシュ


ハッシュとは、元のデータの内容の特徴を表す一定長の数値(ハッシュ値)を導く、暗号化技術である。同じデータなら必ず同じハッシュ値になるが、1ビットでもデータが異なれば全く異なるハッシュ値になるという特徴を持つ。

ビットコインではSHA256という方式を使っている。

例えば上の改行を含む4行の文章のハッシュ値は、次のようになる。
E05F1F83CDEF19565C01F716144BC99CB1898D21FD20B25C6D4A3B9173DF9C69
これに対して、最後に改行を加えただけで、ハッシュ値は以下のように全く異なるものになる。
F99C4D6254C957960319D21FD3A552CA2D349C14146D31B434AE888FA9CA299C

ちょっとわかりにくいかもしれないが、要するにデータの指紋のようなものと考えればよい。指紋と違ってデータが少しでも変わると指紋も大きく変わり、同じ指紋は二つとない、したがってデータの同一性確認に使うことができる(指紋が一致したら犯人である証拠となる)、そんな感じである。

たとえば以下のサイトで実際にハッシュ値を計算することができる。
http://www.convertstring.com/ja/Hash/SHA256

理想的な暗号学的ハッシュ関数は以下のような特徴を持っている。

・与えられたメッセージに対してハッシュ値が容易に計算できる。
・ハッシュ値から元のメッセージを得ることが事実上不可能であること。
・ハッシュ値を変えずにメッセージを改竄することが事実上不可能であること。
・同じハッシュ値をもつ2つのメッセージを求めることが事実上不可能であること。

■基礎となる知識その3 公開鍵暗号


重要な書類を金庫に入れて鍵をかけるのが「暗号化」で、鍵をはずして書類を取り出すのが「復号化」である。金庫の場合は、かける鍵とはずす鍵は共通。このような暗号化方式を「共通鍵方式」という。この方式は、相手に安全に鍵を渡すのが難しいという問題を抱えている。

これを解決するために考え出されたのが「公開鍵暗号」である。鍵といっても物理的なものではなく、数字や文字の列。この方式では、二つの鍵、鍵Aと鍵Bがペアになっていて、一方で鍵をかけた(暗号化した)ものは、ペアとなっているもう一方の鍵でのみ、はずす(複合化する)ことができる。同じ鍵でははずせない。

鍵Aで暗号化 → 鍵Bで復号化
鍵Bで暗号化 → 鍵Aで復号化

もう一つの特徴は、AがわかるとBは簡単な計算で求められるが、BがわかってもAを求めることが実質不可能ということ。たとえば下のような数字、鍵Aの上の行と下の行はそれぞれ素数で、これを掛け算したのが鍵Bになっている。この掛け算はコンピュータなら簡単であるが、鍵Bから鍵Aを見つけ出すのには天文学的な時間がかかる。

鍵A
3490529510 8476509491 4784961990 3898133417 7646384933 8784399082 0577
3276913299 3266709549 9619881908 3446141317 7642967992 9425397982 88533

鍵B
1143816257 5788886766 9235779976 1466120102 1829672124 2362562561 8429357069
3524573389 7830597123 5639587050 5898907514 7599290026 879543541
二つの鍵には上のような性質があるため、鍵Aを「秘密鍵」、鍵Bを「公開鍵」と呼ぶ。
ブロックチェーンで使われている方式は「楕円曲線暗号」というもので、素数の掛け算のような単純なものではないが、基本的な考え方は同じである。
公開鍵暗号には二つの利用形態がある。

1.メッセージを安全に送ってもらう

太郎さんが花子さんからメッセージを送ってもらいたいとする。太郎さんは花子さんに鍵B(公開鍵)を開示する。花子さんはメッセージを「公開鍵」で暗号化して太郎さんに送る。このメッセージは「秘密鍵」がないと復号化できない。「秘密鍵」は太郎さんだけが知っているので、暗号化されたメッセージは太郎さんにしか読むことができない。
他の人が公開鍵を知っても、秘密鍵が分からない(コンピュータで求めるのに天文学的な時間がかかる)ので、暗号化したメッセージは安全である。

2.メッセージに署名を入れる

公開鍵が分かっていれば誰でも太郎さん宛の暗号化メッセージを作成することができる。誰かが花子さんを装って、偽のメッセージを送ったとしても、このままでは、それを確かめることができない。これを解決するのが「電子署名」である。

今度は花子さんもペアとなる鍵を作り、花子さんの鍵B(公開鍵)を太郎さんに前もって知らせておく。別に秘密にする必要はなく公開しても良い。その上で、次のようにメッセージを加工して太郎さんに送る。
・メッセージの「ハッシュ値」を求め、これを花子さんの鍵A(秘密鍵)で暗号化する。これを電子署名と呼ぶ。
・メッセージの最後に電子署名を付け加える
・全体を太郎さんの公開鍵で暗号化する

このメッセージを受け取った太郎さんは、自分の秘密鍵でメッセージを復号化する。そしてメッセージの最後の電子署名が花子さんのものであるかどうかを次のようにして確かめる。
・メッセージの「ハッシュ値」を求める
・電子署名を花子さんの公開鍵で復号化し、その値がメッセージのハッシュ値と一致することを確認する

これによって、メッセージの送り主が花子さんであることと、メッセージが改ざんされていないことを確かめることができる。

■基礎となる知識その4 分散型台帳


普通のデータベース(台帳)はサーバーの中にただ一つ(バックアップはあるかもしれないが、正式なものは一つだけ)存在していて、クライアントからの情報に基づき、サーバーがデータベース(台帳)を書き換えるという方式である。

これに対して分散型台帳というのは、P2Pで接続されているすべてのノード(PC)がデータベース(台帳)を持っていて、それが同期されて同じ内容になるような仕組みになっている。

取引が行われると、その取引データがすべてのノードにバケツリレーのような方式で伝達され、そのデータが正しいと確認されたら、確認したノードのデータベースが更新され、その更新情報が、またすべてのノードに伝わるという方式で、データの同期が行われる。

どのように正しさを確認するか、複数のノードがほぼ同時にデータベースを更新した場合、どちらを正とするか、そのやり方を示したのがナカモトサトシ白書である。

台帳をすべてのノードが持っているため、ノードが攻撃されたり故障したりしてデータがこわれても、残っているデータベースから復旧できるため、非常に堅牢なデータベースを構築することができる。

その一方で、データベースは公開されており、秘密にすることができない。

次回からはいよいよ、ナカモトサトシ白書を解説する。

前回の記事  次回の記事

この記事が気に入ったらサポートをしてみませんか?