ビットコインを通してブロックチェーンをざっくり理解する

#■目次
・はじめに
・ビットコインとブロックチェーンの関係性
・ビットコインを支える技術
・ビットコインブロックチェーンの仕組み
・ビットコインブロックチェーンのメリット/デメリット
・活用事例
・参考文献


# ■はじめに
　この記事は、ビットコインとかブロックチェーンってきいたことはあるけど、どういった仕組みなんだろ～と思っている人むけです。この記事をよんで、仕組みの外枠だけでも何となく理解していただければ幸いです。


# ■ビットコインとブロックチェーンの関係性
##▶「ビットコイン」とは？
　ビットコインの誕生は、2008年10月31日と言われています。サトシ・ナカモトなる匿名の人物が、インターネット上で発表した論文「Bitcoin: A Peer-to-Peer Electronic Cash System（ビットコイン： P2P 電子通貨システム）」をもとに、有志となるエンジニアが集まり開発が開始し、2009年1月、ビットコインが稼働しはじめました。

　私たちが普段使っている法定通貨は発行主体が存在します。たとえば日本円であれば、日本国家が管理し、日本銀行が流通量をコントロールして円の価値を安定させています。日本円は国家によって中央集権的に管理されています。ビットコインは、国家のような中央が管理しなくても機能する「お金」として設計されました。

　そして、ビットコインは中央で管理する人が存在しないにもかかわらず、11年間一度もそのシステムがダウンしたことがありません。そんなビットコインの根幹となっている技術が、ブロックチェーンです。

>【余談】
 ビットコインが初めて現実世界で通用する通貨としての価値をもったのは、2010年5月22日、フロリダのプログラマーが「ビットコインでピザを注文したい」とビットコインの開発者のフォーラムに投稿したのがきっかけでした。その投稿に応じたピザ屋がいて、「ピザ2枚=1万BTC」で取引が成立しました。 ただのデータだったビットコインが、初めて現実の「モノ」と交換でき、価値を持った瞬間です。

##▶「ブロックチェーン」とは？
　分散型取引台帳ともよばれ、ビットコインで使用されている技術です。
　ブロックチェーンはビットコイン以外にも様々なシステムで使用されていますが、共通していることはデータを入れる箱とその箱をチェーンでつないでいくような形状をしていることで、その形状が名前の由来となっています。

　ブロックチェーンには３種類あり、それぞれ管理者の有無、ネットワーク参加の制限方法によって種類がわかれています。

|類型            |管理者     |ノード参加者                   |
|----------------|----------|------------------------------|
|パブリック型     |存在しない |だれでも参加可能                |
|プライベート型   |単独の組織 |参加するためには管理者の許可が必要|
|コンソーシアム型 |複数の組織 |参加するためには管理者の許可が必要|
※ビットコインはパブリック型のブロックチェーンです。

ここでブロックチェーン協会の定義を引用します
>１）「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束する>プロトコル、またはその実装をブロックチェーンと呼ぶ。」

>２）「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上>に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと>呼ぶ。」

引用元：https://jba-web.jp/news/642

（今は意味不明に思うかもしれませんが、この記事を読み終わったときに、なるほどな～と思っていただけるんじゃないかと思います。）


# ■ビットコインを支える技術
　ビットコインを支える主な技術を説明します。

##▶ P2Pネットワーク
![スライド21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/c3642131-c49e-6d29-9505-d4cd7f2f40a0.png)
　P2Pネットワークとは複数のコンピューターに情報を保存する仕組みです。
クラサバでは、データベースに記録された情報は中央サーバーに集められますが、P2Pではそれをネットワークに参加している複数の機器に分散して保存させます。
このネットワークに参加している機器をノードと呼びます。

##▶ハッシュ
![スライド22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/a8246f14-455f-afd7-a259-4416937063ff.png)
　ハッシュとは、あるデータを変換して得られる固定長のデータのことで、ハッシュを得るための関数をハッシュ関数といいます。ハッシュ関数は数値やドキュメントのような文字列など、どんな値でも指定の長さの数値に変換できます。
ハッシュ関数はあるデータを一方向にしか変換できないのが特徴で、ハッシュ化されたデータを元のデータに戻すことは基本的に不可能です。また、元のデータを一文字でも変更すると、ハッシュ化された結果は全く違うものとなり、ハッシュ化された結果から元データを推測することも不可能です。

##▶コンセンサスアルゴリズム（合意形成）
　コンセンサスアルゴリズムとは、P2Pにおいて偽りの取引情報を排除しながら、何が正当な情報なのかを決定するための仕組みのことです。管理者がいない、または複数のP2Pにおいて、誰が更新権限をもつのかをどのように決定するのか、という問題を解決することができます。

　コンセンサスアルゴリズムには3種類あり、それぞれの違いは、その目的に対してどのような作業が重要視されるかということです。

|類型　　　　　　　　　　　　|略称|権限を獲得するのに重要視される作業|
|-----------------------|---|------------------------------|
|プルーフオブワーク　　　　|PoW|大量の電気量や高性能コンピュータを使用した「計算量（Work）」<br>⇒最も多く早く計算したノード|
|プルーフオブステーク　　　|PoS|コインを持っている「保有量（Stake）」<br>⇒コインの保有率が高いノード|
|プルーフオブインポータンス|PoI|「システム内での経済活動の貢献度（Importance）」<br>⇒保有コインの残高」と「取引数の多さ」|
※ビットコインではPowが採用されています。

##▶公開鍵暗号「署名」
![スライド24.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/4445f85e-152a-54a8-08b0-ac7b198fb5c7.png)
　公開鍵暗号の主な使用方法は「データの暗号化」と「署名」の２つがありますが、ビットコインにおいては「署名」を使用しています。「署名」とは、あるメッセージがその作者によって作られたことを検証する仕組みです。

　図の署名の流れを説明します。
　①送信者Aが平文をハッシュ化し、ハッシュ化したものを秘密鍵を使って暗号化
　②送信者Aは平文と暗号化したファイルをセットで受信者Bに送信
　③受信者Bは公開鍵で暗号化されたファイルを複合
　④受信者Bは平文をハッシュ化
　⑤複合したファイルとハッシュ値が一致すれば、以下のことが分かります。
　　　・ファイルを作成したのは送信者であること
　　　　⇒受信者は自分の持っているAさんの公開鍵で、暗号化されたものを元に戻せたことから、暗号化は秘密鍵で行ったと分かります。
　　　　　秘密鍵を持っているのは送信者だけなのでファイルを作ったのは送信者だと推測できます。
　　　・ファイルは改竄されていないこと
　　　　⇒もし改竄されていたら、公開鍵で複合した値③と平文をハッシュ化した値④が一致しないからです。

# ■ビットコインブロックチェーンの仕組み
　ここがメインの説明となります。手順をおって説明していきます。
##▶ブロックチェーンの構造
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/bc7a1db9-7fb8-1440-d851-bccea7c13d09.png)
　ブロックチェーンでは、ネットワーク内で発生した取引の記録を「ブロック」と呼ばれる記録の塊に格納します。ビットコインのブロックの中には、以下のものが含まれています。
　（１）一定期間ごとの取引データ
　（２）前ブロックのハッシュ
　（３）ナンスと呼ばれる任意の数値

![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/bad3ad34-0974-9fe2-1832-3757a3d78f94.png)
　（２）前ブロックのハッシュとは、前のブロックに含まれるデータをハッシュ化したものです。

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/82983601-196c-c9f4-d124-b2bb3c8d7ab7.png)
　（３）ナンスと呼ばれる任意の数値とは、「number used once」の略称であり、使い捨ての数字という意味です。ナンス自体には特段の意味はありませんが、ビットコインブロックチェーンの場合、ナンスに応じて、後続するブロックで使用するハッシュが変化する点が重要です。

![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/7f26ecea-4f72-6176-7a83-302d68b7c8c0.png)
　生成されたブロックは、ハッシュ値をもとに時系列の順番で連結されています。 

##▶ブロック生成の流れ 
![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/6d892e27-1d0d-aa59-2d1a-5db3464081d0.png)
　まず、取引が発生した場合P2Pに取引データが流されます。そしてその取引データをP2Pの参加者が自身のメモリプールに格納し、一定以上取引がたまったらナンスを探す作業を開始します。
　ブロックのハッシュ値は、先頭に一定以上のゼロが続くことというルールが定められています。この条件を満たすナンス値を参加者は総当たりで計算し求めます。

![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/8c8d2e7f-b2bf-6d90-8add-85fe2b7f662a.png)
　そして条件に該当するナンスを一番に探し出すことに成功した参加者がブロックを生成する権利を得、ブロックを生成します。そして生成したブロックを、P2Pに流し、他のノードによって承認作業が行われます。

![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/5d73f75d-8c02-8651-cc7e-8c057980340c.png)
　過半数の参加者によって承認されればそのブロックは正当なものとみなされ、各参加者は自身のブロックチェーンに承認したブロックを追加します。
この計算～承認が先述したPoWの仕組みです。そしてブロックを生成した参加者は、マイニング報酬（2020/11/13時点で6.25BTC）を受け取とります。このマイニング報酬を得るために、全世界の参加者がこの計算作業を行っています

##▶改竄を防ぐ仕組み
　ビットコインブロックチェーンは誰でも自由にいつでも参加することができますので、悪意のあるものが参加する可能性があります。それらを排除する仕組みを説明していきます。
![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/ac02a345-e893-41ab-2c10-9d8396eb6b73.png)
　過去に生成したブロック内の情報を改ざんしようとした場合、変更したブロックから算出されるハッシュ値は変わってしまいます。

![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/db4cffbb-6dbf-44e3-675c-4a17aa91d1c1.png)
　整合性をとるためには、後続するすべてのブロックのハッシュも変更する必要があります。
しかし、新規のブロックは常に生成されているため、そのような変更は極めて困難であり、悪意ある参加者が過半数を占めない限り、実質不可能です。

![スライド13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/f49b104b-3ced-c9a7-13a1-ec3726ac1510.png)
　一番乗りになった参加者が間違った取引を含んだブロックを生成した場合には、どうなるでしょうか？

![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/5a9d648f-f03a-ac74-97d2-eb204b4ba133.png)
　間違った取引を含んだブロックは他の参加者から承認されず、次に条件に該当するハッシュ値を見つけた参加者がブロックを生成し、それを他の参加者が承認するという過程を経ます。
このようにして生成されたブロックをノードが多数決で承認しながら、常に正しいブロックが同期されるような合意形成を行うことでブロックチェーンへの記録作業が行われているのです。

![スライド15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/e0ba9824-e926-d631-d5d4-77d63897669e.png)
　悪意のあるユーザがAさんになりすまして、取引データをP2Pに流した場合、P2Pの参加者はこの取引を受け付けません。なぜなら、取引データはAさんの秘密鍵で署名されている必要があるからです。よって、Aさんの秘密鍵を所有していない他ユーザがなりすましを行うことはできません。
　結果、改ざんされた取引データはブロックチェーンの取り込まれることなくはじかれます。

![スライド16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/ca44815f-5192-a517-958b-6727720418c8.png)
　ブロックチェーンは同時にブロックが生成された時など、分岐する場合があります。

![スライド17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666989/df106bf1-220b-9341-ba19-26720ad4104f.png)
　分岐したブロックのうちどちらを正にするのかというと、先に6個以上のブロックが先に採掘されたブロックチェーンを正とします。
　そして、短い方のブロックチェーンは破棄されるので採掘報酬もなかったことになります。そのため参加者は、より長いブロックチェーンを採掘しようとします。 


# ■ビットコインブロックチェーンのメリット/デメリット
##▶メリット
###①システムがダウンしにくく、継続性が保たれる
クラサバでは、中心となるサーバーからダウンしてしまうとサーバーが復旧するまでサービスを使えません。
しかしブロックチェーンでは、複数の機器で取引内容データや情報処理を分散できます。ノードの一部が使えなくなっても、残りのノードで送金などの情報処理を続けられます。

###②システムに掛かるコストが少ない
クラサバでは、処理がサーバーに集中するため高スペックのサーバーなどを用意する必要があります。システム提供側では、その分リソースを用意するコストが掛かってしまいます。
ブロックチェーンは、取引に関係するあらゆるノードが処理を受け持つため、高スペックなサーバーなどを用意する必要がありません。

###③セキュリティ性が高い
取引内容が正当かどうかをブロック格納前に事前に確認する作業があります。正当性が認められない場合は、ブロックに取引内容が保存されることはありません。また、あとから改竄をおこなうことも各ブロックにハッシュ値を格納しているため、実質不可能です。このように不正な取引が入り込まない、改ざんも困難な安全性の高いシステムが確立されています。

##▶デメリット
###①記録されたデータを削除できない
一度保存されたブロックは基本削除できません。これは改善防止という点では大きなメリットになりますが、消したい情報が間違ってブロックに入ってしまった場合は消去ができないというデメリットにもつながります。

###②処理に時間がかかる
ブロックチェーンは取引などの記録を全て記憶し、新しいデータの追加時などには承認作業などの様々なプロセスが存在します。使い続ければそこに記録されたデータの量も非常に大きいものになっていきます。データの追加のたびに不正がないかチェックを行うため、処理にどうしても時間がかかります。


# ■活用事例
・ウォルマート株式会社　食品トレーサビリティ・プラットフォーム
　⇒食品に起因する健康被害が発生した場合、健康被害の原因となった商品を数分かからずに確実に特定することができる。
　https://www.ibm.com/think/jp-ja/business/food-trust/

・株式会社ケンタウロスワークス　ハンコの代わりにブロックチェーンを　電子署名システム「電子実印」
　⇒「誰が」「いつ」「何に」署名したかを証明し、ブロックチェーンで書類の改ざんを防止することができる。
　https://d-sig.io/」

・double jump.tokyo株式会社　世界最大のブロックチェーン・ゲーム「My Crypto Heroes」
　https://www.mycryptoheroes.net/ja

・ソニー株式会社　著作権管理システム「soundmain」。
　⇒改ざんが困難なので、作成者の著作権情報を明確なものとすることができき、著作権侵害といったトラブルを防げる。
　https://www.sony.co.jp/SonyInfo/News/Press/201810/18-1015/


# ■参考文献
・ビットコインの歴史〜誕生から現在まで〜　https://blockchainexe.com/bitcoinhistory
・bitCoinの仕組み　https://bitcoin.peryaudo.org/index.html
・Bitcoin日本語情報サイト　https://jpbitcoin.com/
・誰も教えてくれないけれど、これを読めば分かるビットコインの仕組みと可能性　https://jp.techcrunch.com/2017/12/29/bitcoin-essay-02/
・ブロックチェーンとは　https://coin.z.com/jp/column/blockchain/
・ブロックチェーンのメリット・デメリットを徹底解説　https://qeee.jp/magazine/articles/2670
・【完全保存版】ブロックチェーンとは 仮想通貨ビットコインを支える新技術を詳細徹底解説　https://kasobu.com/what-is-blockchain/
・ブロックチェーンの基本的な仕組み　https://blockchain-jp.com/guides/4
・5分でわかるブロックチェーンの基本的な仕組み　https://www.slideshare.net/cookle/5-58379474
・今さら聞けない「ブロックチェーン」とは何か？～その基本的なメカニズムと進化の方向を探る　https://innovation.mufg.jp/detail/id=367
・ブロックチェーンの技術：公開鍵暗号　https://blockchain-jp.com/guides/147
・ブロックチェーンのセキュリティに必要不可欠な鍵「秘密鍵・公開鍵」　https://gaiax-blockchain.com/key
・ブロックチェーン技術における PKI の最適解！！　https://www.cybertrust.co.jp/blog/certificate-authority/pki/block-chain-and-pki-vol1.html
・【図解】ビットコインの仕組みや価値がある理由をわかりやすく説明！　https://kasou-tuuka-777.com/bitcoin-sikumi/
・ビットコインとは何か? 第4回:ビットコインの仕組み(取引承認と採掘)　https://jpbitcoin.com/about/whatisbitcoin4
・【仮想通貨】ビットコイン（ブロックチェーンとは？ / マイニングとは？ / ウォレットの種類 / ウォレットとビットコインアドレスの違い / 販売所と取引所の違い / 仮想通貨のFX / アルトコインとは？ / 用語集）　https://official-blog.hatenablog.com/entry/bitcoin
・【仮想通貨】ビットコインとブロックチェーンの仕組みをわかりやすく解説！　https://www.youtube.com/watch?v=v6e5XKz5zD4
・Bitcoin ClockUpMemo　https://bitcoin.clock-up.jp/contents/summary/index
・ビットコインソースコード　https://github.com/bitcoin/bitcoin