ブロックチェーンって何？

# 記事の趣旨
この記事は、ブロックチェーンって何？をざっくり理解してもらえることを目指す記事です。
* ブロックチェーンに興味がある
* 仮想通貨に興味がある
* 聞いたことはあるけどよく知らない
* ブロックチェーンを勉強してみたい

そうした方に読んでいただきたいなと思います。

※**筆者もまだ初学者なため、間違いなどあるかもしれません。どんどんご指摘いただければ幸いです。**

# 目次
* ブロックチェーンとは
* ブロックチェーンの構成要素
* ブロックチェーンは何がすごいのか
* ブロックチェーンの欠点
* ブロックチェーンの利用例
* ブロックチェーンの勉強法
* 終わりに


# 参考文献

* [いちばんやさしいブロックチェーンの教本　人気講師が教えるビットコインを支える仕組み 「いちばんやさしい教本」シリーズ](https://amzn.to/3pwO8qb)
* [トークンエコノミービジネスの教科書(高 榮郁)](https://amzn.to/2UrXBRk)
* [1時間でわかるイーサリアム入門　～ビットコインに次ぐ仮想通貨をゼロから学ぶ～ (NextPublishing)](https://amzn.to/3kyD5ct)
* [堅牢なスマートコントラクト開発のためのブロックチェーン［技術］入門(田篭 照博)](https://amzn.to/3lm5fYu)

# ブロックチェーンとは？
そもそもブロックチェーンとはなんでしょうか。

ブロックチェーンとは、分散型台帳技術の一種です。そんなこと言われてもわかりませんよね。

一言で言ってしまえば、**改竄ができず、信頼性に優れたデータベース** のことです。

詳細を述べていきます。

ブロックチェーンは、データベースの一種です。高度な暗号技術により、データが暗号化されています。そして、一つ一つのブロック(データ)が、一つ前のブロックを暗号化した値(ハッシュ値)を持っており、チェーン状につながっています。これにより、改ざん検出が容易になり、かつ改ざんが非常に困難になります。

そして、参加者(ノード)全員がデータを保持しており(分散台帳)、データの検証などを各ノード全員で行います。これにより、データの透明性が上がることにより信頼性が高まります。

また、従来のクライアント・サーバー型のサービスでは、各ユーザーが、中央サーバーと通信して情報を得ていました。しかし、ブロックチェーンでは、中央管理者はおらず、各ノードがそれぞれ別のノードとやりとりして、データを取得していきます(P2Pネットワーク)。これにより、中央集権的ではないサービスが実現し、また、ノードが1つでも動いていればシステムが動くので、システムダウンが非常に起こりにくくなります。

これが、ブロックチェーンの概要です。

では、そんなブロックチェーンはどうやってできているのか、具体的にブロックチェーンを支える構成要素から、特徴を見てみましょう。

# ブロックチェーンの構成要素

ブロックチェーンは、大きく7つの構成要素があります。それが、
1. 暗号化技術
2. 分散型台帳
3. P2Pネットワーク
4. 参加者(ノード)
5. トランザクション
6. ブロック
7. マイニング

の4つです。1つづつ簡単に解説していきます。
### 1. 暗号技術

暗号技術は、その名の通り、情報を暗号化する技術のことです。これは、ブロックチェーン上のデータ(取引内容など)を、暗号化し、権限を持った人でないと復号できないようにすることで、安全性を保ちます。

ブロックチェーンで使われる暗号技術は、大きく分けて3つあります。

* ハッシュ関数

ハッシュ関数とは、その名の通り関数です。何をする関数かというと、
入力値から、全く関連のないある一定の長さの擬似乱数を出力する関数です。この出力された値を、ハッシュ値と呼びます。
1文字でも入力値が異なれば、全く異なるハッシュ値が返ります。また、ハッシュ値から元の値を計算するのは非常に困難です。
後述するブロックや鍵の生成などに使用します。


* 公開鍵暗号

公開鍵暗号は、**暗号化方式の1つ**です。暗号化のルールで、公開鍵と秘密鍵のペアによって行われます。公開鍵は誰にでも公開されますが、**秘密鍵は、絶対に誰かに渡してはいけません**。
特徴は2つあります。
1. 秘密鍵で暗号化されたものは、公開鍵でしか復号できない
2. 秘密鍵から公開鍵を生成するが、公開鍵から秘密鍵を生成するのは計算量的に非常に困難(ハッシュ関数と同じ理論)

この2つを使って行うのが、次に説明する電子署名です。

* 電子署名

電子署名は、その名の通り、**電子上の署名**です。紙媒体でいうところのハンコみたいなものです。例えば文書の送信者を証明したり、ファイルが書き換えられていないかをチェックするために、電子署名を使います。そしてこれを可能にするのが、公開鍵暗号です。

では、電子署名の流れからもう少し具体的に見ていきます。

まず送信者が、送信するデータ(ファイルなど)をハッシュ化します。
そして、そのハッシュ値を、秘密鍵で暗号化します(これが署名の正体)。
そして、送信するデータと、署名を一緒に送ります。

受信者は、署名から、送信者や改竄のチェックをします。
まず、ファイルをハッシュ化します。(A)
そして、秘密鍵で作られた署名を、ペアの公開鍵で復号します。(B)
この署名は、ファイルのハッシュ値から作られたものですから、AとBの値が一致すれば、改竄などがないことが証明できます。
しかし、1文字でも改竄があれば、Aのハッシュ値が変わり一致しません。また、送信者が違う、つまり受信者の公開鍵と送信者の公開鍵がペアでなければ、Bの値がおかしくなります。

これが、電子署名です。

ではここまでが暗号化技術のざっくりした説明です。Webやネットワークに詳しい方なら知っている話だったかもしれません。

次は、そんな暗号化されたデータをみんなが持っている、という話をします。

### 2. 分散型台帳

上述の通り、分散型台帳は、全てのデータを参加者全員が保持している、ということです。この利点は3つです。

1. 改竄が困難になる
2. データの透明性が上がる
3. システムがダウンしない

1つずつ解説していきます。

1. 改竄が困難になる

これは、考えてみれば単純だと思います。全員が全データを持っているということは、自分のデータだけ書き換えても意味がないということです。そのため、一定以上のノードのデータを書き換えなければいけないが、それは非常に困難です。

2. データの透明性が上がる

これは、従来のシステムとの比較によるものです。中央管理者(Amazonとか)が、ユーザーの情報を全てもち、ユーザーはそこにアクセスすることでサービスが利用できます。しかし、我々ユーザーは、もしAmazonがユーザーのデータを不正利用していても、感知できません。

しかし、ブロックチェーンでは全ノードが全てのブロック(データ)を保持しているため、データの透明性が上がるというわけです。

3. システムがダウンしない

これも、従来のシステムと異なる点です。Amazonがシステム障害を起こせば、ユーザーはアクセスができずサービスを使えません。しかし、ブロックチェーンでは、一人パソコンが落ちたところで、他にもたくさんデータを保持するノードがいるため、全員のパソコンが落ちない限り、システムが動き続けます。

以上が分散型台帳の説明でした。全員でデータを持つことにより、様々なメリットがあります。では、そのデータをどうやりとりするのか、それを次に説明しましょう。

### 3. P2Pネットワーク

**P2Pとは、Peer to Peerの略**です。Peerとは、「立場が同等のもの、同僚」といった意味です。つまりブロックチェーンでは、ノードのことを指します。

要するに、P2Pネットワークとは、**ノード同士が、1対1でいろんなノードとお互いに通信しあうネットワークのこと**を指します。ポケモンの通信交換とかをイメージしてもらうといいかもしれません。ユーザーと中央サーバーという主従関係ではなく、対等なユーザー同士の通信だということです。

何を通信するかというと、それが先ほど説明した、データなわけです。P2Pネットワークでは、新しくデータを取り込んだら、それをバケツリレーのようにコピーし合って全ノードに伝播していきます。こうして分散型台帳が更新されていきます。

### 4. 参加者(ノード)

ブロックチェーンの参加者は、大きく2種類です。サービスを使って送金したりするユーザーと、ブロックを生成し、対価として仮想通貨をもらうマイナーです。マイナーについては後述します。

### 5. トランザクション

**トランザクションとは、取引内容**のことです。ビットコインで言えば、Aさんが、Bさんに対して、5BTC(ビットコイン)を送る、みたいなものです。これをユーザーが発行し、マイナーが新しくブロックを生成することで、トランザクションが承認され、実際に送金が行われます。

### 6. ブロック

ブロックは、マイナーによって生成される、複数のトランザクションをが格納されています。これが、ブロックチェーン上に伝播していくデータです。

### 7. マイニング

マイニングとは、新しくブロックを生成することです。トランザクションから、ノンスと呼ばれる値を、一定条件以下になるものを探し当てる作業のことです。これに一番早く成功したマイナーが、報酬としてビットコインを受け取れる、というわけです。


これまで、ざっくりブロックチェーンを構成する要素について触れてきました。ここで一旦ブロックチェーンのメリットをおさらいしておきましょう。

# ブロックチェーンの何がすごいのか

ブロックチェーンのすごいところは、大きく2つにまとめられます。

1. 中央管理者がいる従来のシステムと異なり、中央集権的ではなくなる
	* ブロックチェーンには、Amazonのような中央管理者が介在しない
	* 誰かのパソコンが落ちても、他の誰かのシステムは動いている
	* 全員のパソコンが落ちない限りはシステムは半永久的に稼働し続ける
	* みんながデータを持つので、透明性が上がる
2. 暗号技術と耐改竄性
	* 暗号技術と耐改竄性に非常に優れたシステムであること
	* 安全で信頼性の高いシステムを作ることができる

ここまでで、いかにブロックチェーンがすごいのか、ということをお話ししてきました。しかし、もちろんブロックチェーンにも欠点があります。それを、次のパートでお話ししていきます。

# ブロックチェーンの欠点

どんなものにも、長所があれば短所もあります。そこで、ブロックチェーンの欠点や課題について、お話ししていきます。

* バグがあるプログラムや、間違った取引内容(トランザクション)を発行しても、一度ブロックチェーン上に書き込まれると書き換えができない

ブロックチェーンは、改竄に非常に強いというメリットがあります。しかしこれは裏を返せば、訂正ややり直しがきかない、ということになります。イーサリアムというブロックチェーンでは、スマートコントラクト、というプログラムを送ることができます。(例えば、ある条件になったらAさんに5ETH(イーサという仮想通貨)を送る、とか)しかし、ここにバグや不具合、脆弱性があれば、攻撃の対象になります。実際に、プログラムの脆弱性によって数十億円分の仮想通貨が奪われる事件もありました。

このように、一度送信したら書き換えができないことは、短所になりうるということです。

* スケーリングの問題

スケーリングとは、規模の拡大のことです。つまり、ブロックチェーンのシステムは、規模を拡大させていくことが難しいという問題があります。理由は2つです。
一つ目は、マイニングには、通常10分程度かかる、ということです。構成要素でマイニングの説明をした時に、ノンスの話をしました。このノンスを見つけるのに、10分ほどかかるように難易度が設定されています。1つに10分もかかってしまうと、物理的に急速に拡大させることが難しくなります。
二つ目は、分散型台帳であるという点です。ブロックチェーンでは全ノードが全ブロックを持っています。しかし、ほとんどのノードは、高いスペックのPCなど持っていないでしょう。データが何百GBと大きくなれば、システムが動かなくなるノードがでてきます。これではみんなが使えるシステムではなくなってしまいます。

これが、スケーリングの問題です。

他にもたくさんあるのですが、興味のある方は参考文献の1、4冊目を読んでみてください。


ここまで、ブロックチェーンの概要から欠点までをみてきました。では、実際にどう使うんだ？という疑問をお持ちの方も多いと思います。そこで最後に、ブロックチェーンの利用例を、いくつかの種類に分けてみていきたいと思います。

# ブロックチェーンの利用例
ブロックチェーンは、仮想通貨が非常に有名ですが、それ以外の様々な分野でも活用が期待されている技術です。どんなものがあるか、サラッとご紹介していきます。

### 仮想通貨

これが最も代表的な利用例ですね。
* ビットコイン
* イーサリアム 
* Nem
* Libra(Facebook)

などがあります。Libraに関しては、早ければ2021年1月には発行されるということで注目が集まっています。

### ゲーム

ゲーム分野でも、活用が活発です。「ゲームをするだけでお金が稼げる」と飛びついた人もいるんじゃないでしょうか。キャラクターやアイテムが、仮想通貨と取引ができ、それがP2Pで行えるので、強いアイテムや激レアアイテムなどが、お金になる、というわけです。例としては、
* cryptoheros
* cryptokitty

などがあります。ただ日本では、RMT(Real Money Trade)とされ違法になるかもしれないので、この辺りは法整備が整ってくるとより活発になるんじゃないでしょうか。

### トークンエコノミー

トークンとは、仮想通貨など、代替通貨のことを指します。独自のブロックチェーン上や、イーサリアム上で作ることもできます。特定のアプリやサービス内だけで使えるものです。楽天ポイントなんかをイメージすると理解しやすいと思います。トークンという通貨が流通する経済圏、をトークンエコノミーと言います。
利用例としては、
* LINE Token Economy
* ALIS
	* ブロックチェーンでできたSNS
	* 良い投稿に対してトークンが送られる

詳しく知りたい方は、参考文献の3冊目をご覧ください。

### 流通システム
これは、ブロックチェーンのデータの透明性に着目したものです。
* 生産から消費者に届くまでのプロセスをブロックチェーン上で管理
* そうすることで、私たちは確かな情報から、商品を選ぶことができる
* 商品の安全性を、生産者は証明できる


以上が、利用例です。まだまだ発展途上の技術なので、アイデア次第で世界を変えられると筆者は思っています。

では最後に、今後勉強したい方が、どういう風に勉強していけばいいかを、勉強中の筆者が書いてみたいと思います。

# 勉強方法
何がやりたいかで、大きく変わってきます。

* 仮想通貨、送金に興味があるなら
	* ビットコイン
* ブロックチェーンシステムそのものに興味があるなら
	* C++など
	* より深い知識が必要
	* インフラやネットワークの知識
* ブロックチェーンを使ったアプリを作りたい
	* イーサリアム
	* 筆者は今これを勉強している

手を動かして勉強できるサイトを2つ紹介しますね。

* ブロックチェーンの仕組みを理解するために良いサイト
[EnterChain](https://enterchain.online/home)
* イーサリアム上でアプリを作れるハンズオンサイト
[クリプトゾンビ](https://cryptozombies.io/jp/course)

# 終わりに
ここまで読んでいただいた方、本当にありがとうございます。ブロックチェーンに興味を持つ方が一人でも増えたなら幸いです。

ブロックチェーンは発展途上の技術で、日々すごいスピードで進化しています。そして私は、間違いなく世界を変える技術だと思っています。ブロックチェーンエンジニアの需要は間違いなくどんどん増え、足りなくなっていくでしょう。

そんな最先端の世界に入ってみたい、入る人が増えて欲しい、そう思い記事を書きました。筆者もまだまだ勉強中でわからないことだらけですが、もっと勉強して、より深い、技術的な記事も書いていきたいと思っています。

最後までお読みいただき、ありがとうございました。