ブロックチェーンとその関連技術のイメージを掴む

この記事は[レコチョクAdvent Calendar 2021](https://qiita.com/advent-calendar/2021/recochoku)の15日目の記事となります。

# はじめに
最近新しい技術の1つとして「ブロックチェーン」という言葉をよく聞くという方も多いと思います。「ブロックチェーン」を聞いたことがない方は「暗号資産」「仮想通貨」なら聞いたことがあるのではないでしょうか。

ブロックチェーンは暗号資産（仮想通貨）で用いられている技術の1つです。

私は最近この分野に関連する部署へ配属となり、ブロックチェーンについて学び始めました。しかし、ブロックチェーンは関連技術が非常に多く、知らない単語が次々と出てきて調べるのに苦労しました。

この記事ではブロックチェーンとは何なのかについて、技術的な知識がなくても暗号資産をよく知らなくてもイメージが掴めるように、また、関連技術についても調べるとっかかりになりやすいように紹介を挟みながら説明をしていきます。

厳密性よりもわかりやすさを重視した記事となっていますので、その点をご了承いただきながら読んでいただけますと幸いです。

## この記事をおすすめしたい人
- ブロックチェーンが何なのかよくわからない人
- 特に技術的な知識がない人
- ブロックチェーンについて学びたいけど何から調べればいいかわからない人

# 目次
1. [ブロックチェーンとは](#1-ブロックチェーンとは)
2. [ブロックチェーンはネットワーク上でどのように管理されているのか](#2-ブロックチェーンはネットワーク上でどのように管理されているのか)
    1. [中央集権型システム](#2-1-中央集権型システム)
    2. [分散型システム](#2-2-分散型システム)
    3. [中央集権型システムと分散型システムの特徴](#2-3-中央集権型システムと分散型システムの特徴)
    4. [ブロックチェーンの種類](#2-4-ブロックチェーンの種類)
3. [ブロックチェーンの構造](#3-ブロックチェーンの構造)
    1. [ブロックはどのようなデータで構成されているのか](#3-1-ブロックはどのようなデータで構成されているのか)
        1. [トランザクション](#3-1-1-トランザクション)
        2. [ナンス](#3-1-2-ナンス)
        3. [ハッシュ値](#3-1-3-ハッシュ値)
    2. [ブロックがチェーンのように繋がっているとはどういうことか](#3-2-ブロックがチェーンのように繋がっているとはどういうことか)
    3. [ブロックはどのような手順でブロックチェーンに繋がるのか](#3-3-ブロックはどのような手順でブロックチェーンに繋がるのか)
        1. [ナンスの計算](#3-3-1-ナンスの計算)
        2. [ブロックの承認作業](#3-3-2-ブロックの承認作業)
        3. [コンセンサスアルゴリズム](#3-3-3-コンセンサスアルゴリズム)
4. [ブロックチェーンの性質](#4-ブロックチェーンの性質)
    1. [ブロックチェーンを用いるメリット](#4-1-ブロックチェーンを用いるメリット)
        1. [追跡可能性（トレーサビリティ）](#4-1-1-追跡可能性（トレーサビリティ）)
        2. [耐改ざん性](#4-1-2-耐改ざん性)
        3. [透明性](#4-1-3-透明性)
    2. [ブロックチェーンの課題](#4-2-ブロックチェーンの課題)
        1. [スケーラビリティ](#4-2-1-スケーラビリティ)
        2. [セキュリティ](#4-2-2-セキュリティ)
        3. [ファイナリティ](#4-2-3-ファイナリティ)
5. [取引の検証](#5-取引の検証)
    1. [公開鍵暗号方式](#5-1-公開鍵暗号方式)
    2. [どのように検証するのか](#5-2-どのように検証するのか)
6. [まとめ](#6-まとめ)

# 1. ブロックチェーンとは
ブロックチェーンとは、データを管理する「台帳（データベース）」の一種です。「台帳」なので、ブロックチェーン上にはデータが記録されています。

ブロックチェーン上で管理されているデータとは、インターネット上でのお金のやりとりに関するデータです。「お金」と言いましたが、ビットコインなどの暗号資産（仮想通貨）のことです。つまり、今話題のビットコインを買ったら、自分のところへ送金されたという内容がブロックチェーン上に記録されることになります。

暗号資産について簡単に説明します。暗号資産とは、法定通貨と呼ばれる日本円などとは違い、紙幣や硬貨のような実体がないインターネット上で扱われるお金です。近年急速に普及しており、多数の種類が出てきています。株やFXのように投資目的で買う人も多いです。

この記事では、

- ブロックチェーン自体がネットワーク上でどのように管理されているのかについて
- ブロックチェーンがどのような構造でデータをどのように管理しているのか
- ブロックチェーン内のデータについて

という順で範囲を狭めながら説明していきます。

<a id="2"></a>
# 2. ブロックチェーンはネットワーク上でどのように管理されているのか
ブロックチェーンは台帳の中でも「分散型台帳」と呼ばれています。「分散型」とは、ブロックチェーンがどのように管理されているかという特徴を表しています。

「分散型」で管理されているとはどういうことなのか、対比的な「中央集権型」と比較して説明していきます。

<a id="2-1"></a>
## 2-1. 中央集権型システム
現在、一般的なサービスでは多くの場合、中央集権型のシステムが用いられています。そのようなサービスではクライアントサーバ方式という通信方式が用いられています。

例えばATMでお金を振り込む際にはATMで振り込み先の口座番号を入力して振込を行いますが、ATM自体に口座の情報が保存されているわけではありません。そのようなデータは銀行が管理するサーバというコンピュータ上に保管されています。ATMはクライアントとしてサーバにアクセスし、サーバからデータを送ってもらったり、振込などの処理をしてもらったりします。各クライアント（ATM）とサーバが通信をしているのです。

もう1つ、レコチョクらしく音楽サブスクサービスを例にとって考えてみます。例えば、サブスクのスマホアプリで音楽が何千万曲と聴けますが、そのすべての楽曲データがスマホに入っているわけではありません。あなたのスマホがクライアントとして、データが保存されているサーバにアクセスし、データを送ってもらっているのです。また、ログイン時のIDとパスワードの照合などの処理もサーバが行っています。

このようなシステムではサーバはサービスの運営者（企業など）が管理しており、データもサーバ上のデータベースに保管されています。そのため、サービスやその中で扱われるデータに関して運営者（サーバの管理者）が様々な権限を持っています。仮にその管理者、例えば銀行が悪意を持っていたら預金データを改ざんしたり、サブスクを提供している企業がユーザの個人情報を悪用したりすることもできてしまいます。また、サーバにデータを預けている状態なので、予期せぬ障害や悪意のある第三者からの攻撃でサーバ上のデータが失われる危険性もゼロではありません。

もちろん、普段私たちはこのようなことはあまり考えずに様々なインターネット上のサービスを安心して利用できていますが、それはサービスの運営者を信頼できているからです。中央集権型システムの様々なサービスは運営者への信頼で成り立っているのです。

このようにクライアントサーバ方式によるデータベースでのデータ管理のように特定の組織・個人のみが管理する権限を持っている状態が中央集権型システムです。

![中央集権型のイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/32bd4f30-e79e-dbf0-d5eb-a67402b05c45.png)

<a id="2-2"></a>
## 2-2. 分散型システム
分散型はその反対で、特定の管理者がいません。これはP2P（Peer to Peer）通信方式という技術を利用して実現されます。

クライアントサーバ方式ではたくさんのクライアントが1つのサーバと集中的に通信するという構造でした。ネットワークを構成するコンピュータ1つ1つを「ノード」と言いますが、P2P通信方式においてノード（ピアとも言います）はそれぞれ対等であり、1対1の通信をします。

ネットワーク上での処理は、複数のノードで協力して行います。そしてデータはどこかに一元管理されているのではなく、全ノードで同じデータを共有しています。複数のノードが分散して管理者となっており、意思決定などの際にはそれらのノードで合意を取るため、特定の誰かを管理者として信頼する必要はありません。これが分散型システムです。

P2P通信方式はLINEやSkypeなどでも用いられています。

![分散型のイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/af5cac0b-dce9-4f86-4e80-9dcb11af9d7a.png)

<a id="2-3"></a>
## 2-3. 中央集権型システムと分散型システムの特徴
中央集権型システムと分散型システムにはそれぞれ以下のような特徴があります。

- 中央集権型システム
    - クライアントがサーバと集中的に通信を行う。
    - サーバに権限が集まっており、サーバ（管理者）への信頼で成り立っている。
    - サーバは多くの処理を行うため、ある程度高い処理性能を必要とする。
    - データはサーバが一元管理するため、透明性は低いが、セキュリティは高い。
    - システムの管理がしやすい。
    - サーバが壊れたらネットワーク全体に影響が出るが、障害の原因は突き止めやすい。

- 分散型システム
    - 各ノード同士で1対1の通信を行う。
    - 各ノードは対等であり、特定のノードを信頼する必要がない。
    - 複数ノードで処理を行うため、各ノードは高い処理性能を必要としない。
    - 全ノードが同じデータを共有して管理するため、透明性が高いが、セキュリティは低い。
    - システムの管理が複雑になる。
    - 1台のノードが壊れてもネットワーク全体への影響はあまりないが、障害の原因は突き止めにくい。

<a id="2-4"></a>
## 2-4. ブロックチェーンの種類
ブロックチェーンは「分散型台帳」と呼ばれていることから、分散型で管理されているのだということがわかります。ブロックチェーンはたくさんのノードによってデータが保持され、共同で管理されています。

が、少しだけ厳密な話をすると、実はブロックチェーンのすべてが完全な分散型というわけではなく、ブロックチェーンには大きく3種類あります。

- パブリック型

    誰でもノードとしてネットワークに参加でき、管理者が不在である。分散型システムの特徴を持つ。
- プライベート型

    ネットワークの参加者が単独の管理者によって制限されている。中央集権型の特徴を持つ。
- コンソーシアム型

    ネットワークの管理者が複数いる。分散型システムと中央集権型の中間的な特徴を持つ。

現在、ビットコインやイーサリアムを含む多くの暗号資産ではパブリック型のブロックチェーンが使われています。そのため、単に「ブロックチェーン」と言うとパブリックブロックチェーンを指すことが多いです。この記事でもパブリックブロックチェーンを前提として話を進めていきます。

また、ブロックチェーンは暗号資産の種類ごとにビットコインのブロックチェーン、イーサリアムのブロックチェーンのように別々に存在しています。

<a id="3"></a>
# 3. ブロックチェーンの構造
ブロックチェーンはデータが記録されている台帳ですが、単純にデータが並んでいるのではなく、データの集合である「ブロック」が「チェーン（鎖）」のように繋がっている構造をしています。

と、いきなり言ってもイメージが湧かないと思います。

ここからは

- ブロックはどのようなデータで構成されているのか
- それがチェーンのように繋がっているとはどういうことか
- ブロックはどのような手順でブロックチェーンに繋がるのか

を説明していきます。

<a id="3-1"></a>
## 3-1. ブロックはどのようなデータで構成されているのか
ブロックは

- 決められたデータ量のトランザクション
- ナンス
- 前のブロックのハッシュ値

で構成されます。難しい単語が多いですが、順に説明していきます。

<a id="3-1-1"></a>
### 3-1-1. トランザクション
トランザクションとは暗号資産が「いつ、誰から誰にいくら送金された」というような取引データです。暗号資産の取引が行われるとトランザクションはトランザクションプールという場所に集められ、決められた手順に従って決められたデータ量ずつブロックにまとめられます。この手順に関しては[4. ブロックチェーンの性質](#4)で解説します。

<a id="3-1-2"></a>
### 3-1-2. ナンス
ナンスとは「number used once」の略称であり、ブロックの生成時に生成される値です。ブロックをチェーンのように繋げていくために必要な値で、「とある法則によって求められた値」です。

ナンスが具体的にどのように求められる値なのか、なぜこの値がブロックを繋げる際に必要なのかは[3-3. 
 ブロックはどのような手順でブロックチェーンに繋がるのか](#3-3)で説明します。

<a id="3-1-3"></a>
### 3-1-3. ハッシュ値
ハッシュ値とは、ある値から計算される値です。ハッシュ値を求める関数（ハッシュ関数）を`hash()`とすると、ある値`x`から`y=hash(x)`が求められます。
簡単な例を表すと以下のようになります。

![ハッシュ関数の例.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/8ea6a0e0-4e0b-cc27-b10e-1da3de4a780b.png)

ある`x`のハッシュ値を求めることを「`x`をハッシュ化する」という言い方をすることがあります。

ブロックチェーンでは暗号学的ハッシュ関数と呼ばれるものが用いられ、実際には`hash()`はとても複雑な計算になります。暗号学的ハッシュ値は次のような特徴を持ちます。下図の例ではSHA256というビットコインなどで用いられているハッシュ関数を用いています。

- `y`の長さは一定である（図中の※1）。
- 似たような`x`でも全く違う`y`が求められる（図中の※2）。
- `y`から`x`は逆算困難である（一方向性・原像計算困難性）。
- 異なる`x`から同じ`y`が求められる可能性はとても低い（衝突困難性）。
- ある`x`から求められる`y`と同じハッシュ値になる異なる`x`を見つけることは困難である（第2原像計算困難性）。

![ハッシュ関数の性質.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/427beff0-2af5-85eb-c8df-ef6100032a5f.png)

暗号学的ハッシュ関数という名前からも分かる通り、これらの性質からハッシュ関数は暗号技術に用いられます。詳しくは[5. 取引の検証](#5)で触れますが、上記の性質は暗号を解読するのが困難であるなど暗号技術において重要な性質を持っていることを示しています。

ハッシュ関数はその計算方法によって様々なものがありますが、例えばビットコインでは例に示した「SHA-256」と「RIPEMD-160」という名前のハッシュ関数が使われています。

そしてここが最も重要ですが、**ブロックチェーンではn番目のブロックのハッシュ値がn+1番目のブロックの中に含まれています。**
もう少し具体的に言うと、n番目のブロックに含まれる「いくつかのトランザクション」と「ナンス」と「n-1番目のハッシュ値」の3つのデータから求められるハッシュ値が、次のn+1番目のブロックに含まれます。

![n番目のハッシュ値.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/a9c548bc-1678-81e1-dc22-aeb133b7a8ea.png)

<a id="3-2"></a>
## 3-2. ブロックがチェーンのように繋がっているとはどういうことか
ここまでの内容からn-1番目のブロックから生成されるハッシュ値がn番目のブロックを構成し、n番目のブロックから生成されるハッシュ値がn+1番目ブロックを構成していることがわかります。これがブロックがチェーンのように繋がっているということです。

![ブロックの繋がり.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/ac7e68a5-7e7d-d31f-d2b3-d21678bc5d55.png)

<a id="3-3"></a>
## 3-3. ブロックはどのような手順でブロックチェーンに繋がるのか
ここまででブロックの中身・チェーンのように繋がるとはどういうことかがわかったかと思います。では、ブロックはどのような手順でブロックチェーンに繋がっていくのでしょうか。

<a id="3-3-1"></a>
### 3-3-1. ナンスの計算
n+1番目のブロックに含めるn番目のブロックのハッシュ値は、最初から決まっているn-1番目のブロックのハッシュ値とトランザクションに加えてナンスがあることで、ブロックを繋げる際に決めることができます。

![ナンスが決まるタイミング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/b9ec98cb-dc6a-6f13-4a1f-e27a54c3865c.png)

ここでナンスに適当な数字を割り当ててもブロックを繋げることはできますが、あるルールによって決めることでブロックを繋げる際に制限を設けることができます。つまり、誰でも簡単にはブロックを繋げられないようにするのです。詳しくは[4. ブロックチェーンの性質](#4)で説明しますが、そうすることによってブロックの改ざんを困難にしています。

ブロックを繋げるためには、このナンスを求める計算が重要なのです。

ナンスを求める計算とは具体的に、ハッシュ値が決まられた値より小さいものとなるナンスを見つけることです。つまり、`y=hash(x)`が小さくなる`x`を探します。ハッシュ値の長さは一定なので、最初に0が並ぶ値が小さい値ということです。この計算は何か特別な解法があるわけではなく、`x`の値を色々と変えながら総当り方式で`y`を求めてみるという方法で行われます。

<a id="3-3-2"></a>
### 3-3-2. ブロックの承認作業
ナンスを見つける作業をマイニングと言います。1つのブロックのナンスは1つのノードが求めた値が採用され、そのノードをマイナーと言います。

ナンスが求められると、マイナーノードから他のノードにその情報が伝搬されます。そして各ノードはそのナンスが正しく求められたものかを検証してさらに他のノードに共有し、ネットワーク内のノードの過半数に承認されればブロックチェーンに追加されます。

![ブロック承認の流れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/a164647b-278c-5f18-b82b-a0a07dc95a44.png)

暗号資産の取引が行われる度にこの承認作業が必要になるため、取引を行う際に手数料が引かれ、その手数料と承認の際に新しく発行される暗号資産がマイナーの報酬となります。マイナーはこの報酬を得るために承認作業を行います。ブロックの承認作業が「マイニング」と呼ばれる理由はこの後者の報酬を得ることが新しいコインを採掘するということになるからです。

<a id="3-3-3"></a>
### 3-3-3. コンセンサスアルゴリズム
特定の管理者がいないブロックチェーンのネットワーク全体で、承認作業をするノード、つまりマイナーを決める基準としてコンセンサスアルゴリズムというものがあります。

コンセンサスアルゴリズムには例えば次のようなものがあります。

- PoW（Proof of Work）
    ナンスの計算を最初に解いたノードを承認者とするルールです。
    そのため、承認者となるためには膨大な計算を速く行うコンピュータ性能・その間コンピュータを動かすための大量の電力が必要となります。

    ビットコインやイーサリアムなどで現在用いられているコンセンサスアルゴリズムです。

- PoS（Proof of Stake）
    暗号資産をより長い期間、たくさん保有していた人ほどマイニングを簡単に行うことができ、承認者となりやすいルールです。暗号資産の保有をステーキングと言います。
    PoWのマイニングと違い、承認者の決定は計算能力に依存するわけではないので高性能なコンピュータ・電力を必要とせず、手数料も抑えられます。

    イーサリアムはもう間もなくこちらに移行するそうです。

<a id="4"></a>
# 4. ブロックチェーンの性質
ここまででブロックチェーンの構造についてわかっていただけたかと思いますが、なぜそのような複雑な構造を取る必要があるのでしょうか。
それは、改ざんを困難にするためです。では、なぜブロックチェーンは改ざんが難しいのか。そこも含めて、この章では

- ブロックチェーンを用いるメリット
- ブロックチェーンの課題

を説明します。

<a id="4-1"></a>
## 4-1. ブロックチェーンを用いるメリット
ブロックチェーンはメリットとしてこれまでの台帳技術にはなかった性質を色々と持っています。ここでは一部を紹介します。

- 追跡可能性（トレーサビリティ）
- 耐改ざん性
- 透明性

<a id="4-1-1"></a>
### 4-1-1. 追跡可能性（トレーサビリティ）
暗号資産の取引データは過去のものからすべてブロックチェーン上に記録されています。そのため、取引データを遡ることが可能です。

<a id="4-1-2"></a>
### 4-1-2. 耐改ざん性
[3-1. ブロックはどのようなデータで構成されているのか](#3-1)、[3-2. ブロックがチェーンのように繋がっているとはどういうことか](#3-2)で説明した通り、ブロックはチェーンのように繋がっていますが、その構造はブロックチェーン上のデータの改ざんを困難にします。

![耐改ざん性.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/ac06184b-9424-dc45-270f-b82e1bf922f8.png)

例えば悪い人が虚偽の送金データを作るために、n番目のブロックのトランザクションを改ざんしようとしたとします。しかし、n番目のブロックのハッシュ値はn+1番目のブロックを構成するため、n+1番目のブロックも改ざんする必要があります。同様にn+2番目、n+3番目...も改ざんしなければいけません。

この時点で結構大変そうです。

さらに、ブロックチェーンはすべてのノードで同じデータが共有されているため、1つのノードのデータを改ざんしても他のノードと整合性が取れず、偽物だとバレてしまいます。改ざんしたデータをネットワーク全体で正当化させるには無数にあるノードの過半数のノードで改ざんしなければなりません。

ここまでするのは実質無理そうだということが想像できると思います。これがブロックチェーンの耐改ざん性です。

<a id="4-1-3"></a>
### 4-1-3. 透明性
ブロックチェーンのデータはある1つの場所に保存されているのではなく、ネットワークを構成しているたくさんのノードが共有しています。誰かが隠し持っておくことはできません。そういった意味で透明性が高いです。

<a id="4-2"></a>
## 4-2. ブロックチェーンの課題
ブロックチェーンはその特性上次のような課題も抱えています。ここでも一部のみ紹介します。

- スケーラビリティ
- セキュリティ
- ファイナリティ

<a id="4-2-1"></a>
### 4-2-1. スケーラビリティ
先程説明したブロックの承認作業ですが、難しい計算をすることがブロックを正しいものと承認することになると説明しました。計算が簡単にできてしまうと耐改ざん性の面で意味がないので、この難易度はある程度高くなるように自動的に調整されています。しかし、その分取引にかかる時間も長くなります。

現状でビットコインの1回の取引には10分から1時間程度かかります。

詳しい説明は割愛しますが、この解決のためにさらにライトニングネットワークなどの新しい技術も生まれています。

<a id="4-2-2"></a>
### 4-2-2. セキュリティ
ブロックの承認は複数のマイナーが次々と行っていくので、同時に複数のブロックが承認され、ブロックチェーンが分岐してしまうことがあります。これは悪意を持った人が意図的に引き起こす場合もあります。

しかし例えばビットコインの場合は、「ナカモトコンセンサス」という最も長く続いている分岐先を正しいものとするルールがあります。そのため、不正なブロックを続けようとしてもネットワーク内の多数が正しいものと判断した方が長く続き、短い方は捨てられます。そしてブロックチェーンは1本に収束します。そのため、分岐することがあっても一時的なものです。

![ブロックチェーンの分岐.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/45dd7870-a6df-cd51-37be-457b0d472b2b.png)

しかし、これを悪用した51%攻撃というものがあります。

先程のナカモトコンセンサスでは速く、長くブロックを繋げれば正しいものとされるということでした。そこでネットワーク全体の過半数、つまり51%の計算能力を持っていれば、不正なブロックチェーンを正当なブロックチェーンが伸びるより前にそれよりも速く、長く伸ばして正当化することができてしまいます。

ただし、51%攻撃を行うための膨大な計算能力を確保するには莫大な資金が必要となります。また、暗号資産への信用がなくなれば不正をしてまで得た暗号資産の価値がなくなってしまいます。そのため、正当にマイニングを行って報酬を得る方が利益が大きいため、51%攻撃は行われないと考えられています。

とは言え、詳細は割愛しますが実は51%攻撃が行われた暗号資産も過去に複数あります。

<a id="4-2-3"></a>
### 4-2-3. ファイナリティ
「ファイナリティ」とは、後からその取引内容が変更されたり取り消されたりすることがない決済の確定のことです。当然のことですが、暗号資産に限らず決済ではファイナリティが重要視されます。

ブロックチェーンはデータの改ざんが非常に困難だと説明しましたが、ブロックが承認された直後はまだ後ろにブロックが繋がっていないので、改ざんされてしまう危険性はあります。つまり、暗号資産のファイナリティは保証されているとは言い切れないのです。

ただし、ブロックチェーンは長く繋がっていくほど改ざんが難しくなります。そのため例えばビットコインでは、あるブロックの後ろに6つブロックが繋がると改ざんの可能性がほぼないとされています。

<a id="5"></a>
# 5. 取引の検証
ここまででブロックチェーンが改ざんに強いことはわかっていただけたかと思いますが、そもそも不正なデータをブロックに含めてしまったら元も子もありません。

取引が正当なものだという検証は、送金者によってトランザクションが生成された後、そのトランザクションがネットワーク内のノードに伝搬される際に各ノードによって行われます。もしも正しくないと判断された場合は、次のノードへ伝搬されずに捨てられます。

この章では取引データが正しいものかどうかという検証がどのように行われるかを簡単に説明します。

<a id="5-1"></a>
## 5-1. 公開鍵暗号方式
トランザクションの検証には公開鍵暗号方式という暗号技術が使われています。

暗号資産の取引をする1ユーザは取引の際に使う秘密鍵と公開鍵を1セットで保持しています。公開鍵は秘密鍵から作成されます。鍵と言ってもインターネット上で使用する鍵なので、乱数のデータです。

公開鍵は名前の通り公開されます。秘密鍵は本人が誰にもバレないように保管しています。秘密鍵は本人しか知らないはずなので、秘密鍵を保持していることが証明できれば本人であることの証明になり、その人が保持している暗号資産の証明になります。ATMで本人しか知らないはずのパスワードを入力するのと同じです。秘密鍵が盗まれるということはつまり、暗号資産が盗まれるということです。

<a id="5-2"></a>
## 5-2. どのように検証をするのか
検証はトランザクションのデータを用いて行われます。

まず、送金者が行う取引のトランザクションをハッシュ化し、そのデータを基に本人しか持っていない秘密鍵を使って別のデータを作成します。これを署名と言います。

次に送金者は元のトランザクションと署名したデータ、公開鍵をネットワーク上へ送ります。それらを検証する人は秘密鍵で作成されたデータと公開鍵から元のデータを求めます。そして送られてきた元データと一致すれば送信者が署名した（つまり秘密鍵を保持している）本人だということが証明されます。

![検証手順.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/0e950419-976e-474b-1fde-406d5047e09c.png)

署名は秘密鍵を持っている人にしかできません。また、公開鍵から秘密鍵を求めることは実質不可能です。

![予測不可能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534740/0ef56096-b1e3-392b-67c7-3023fe7d4171.png)

このようにして取引データが送金者本人によって作成された正しいものだという証明がされます。

<a id="6"></a>
# 6. まとめ
- ブロックチェーンは暗号資産の取引データを管理するための「分散型台帳」である。
- ブロックチェーンはP2Pネットワーク上で管理されている。
- ブロックは、決められたデータ量のトランザクション・ナンス・前のブロックのハッシュ値で構成される。
- ブロック同士はハッシュ値によってチェーンのように繋がっている。
- ナンスを求めてブロックをブロックチェーンに繋げることでブロックが承認される。
- ブロックチェーンはデータの改ざんに強い。
- 取引の正当性は公開鍵暗号方式によって証明される。

# さいごに
長文の記事となってしまいましたが、最後まで読んでいただきありがとうございます。この記事が少しでもブロックチェーンとその関連技術についてのイメージを掴む手助けになることを願っています。

明日の[レコチョクAdvent Calendar 2021](https://qiita.com/advent-calendar/2021/recochoku)は16日目&lt;[NFTが世界中のビジネス市場を変えるかもしれない件](https://qiita.com/HimenoAoki/items/a7a7bd3e19b27518a859)&gt;です。
お楽しみに！

# 参考
- [ブロックチェーンとは？](https://www.ntt-tx.co.jp/products/contractgate/nyumon_01.html)
- [ブロックチェーン(blockchain)とは何か？仕組みや特長をわかりやすく解説！](https://trade-log.io/blog/369/)
- [4枚の図解でわかるブロックチェーン技術](https://persol-tech-s.co.jp/corporate/security/article.html?id=69)
- [今だからこそ知りたいブロックチェーンの基礎](https://www.ieice.org/~cs-edit/magazine/ieice/spsec/Bplus53_sp.pdf)
- [ビットコインを支えるブロックチェーンをざっくり解説](http://kondo-law.com/cms/?p=781)
- [ブロックチェーンの3つの課題とは？〜スケーラビリティ、ファイナリティ、セキュリティ〜](https://trade-log.io/blog/575)
- [51%攻撃とは？仕組み・危険性・対策・実例をわかりやすく解説](https://coinotaku.com/posts/1632)
- [キャッシュレスを学ぼう(5)－暗号資産（仮想通貨）](https://www.nli-research.co.jp/report/detail/id=64708?site=nli)
- [「マイニング」とは何か](https://www.nli-research.co.jp/report/detail/id=67889?site=nli)
- [ブロックチェーン・暗号資産の光と影](https://www.jstage.jst.go.jp/article/bplus/14/1/14_38/_pdf)
- [いまさら聞けないブロックチェーンの仕組み〈前編〉（杉井 靖典）](https://jba-web.jp/blogs/sugii_20200618)
- [わかりやすくブロックチェーンを説明してみる（第5回）：トランザクション（送金情報）の検証](https://www.profound-dt.co.jp/blockchain/chap5/)
- [分散システム（distributed systems）とは？仕組みや種類、メリットデメリットについて徹底解説](https://cybersecurity-jp.com/column/43314)
- [P2P(ピアツーピア)とは？仕組みから活用例まで詳しく解説](https://udemy.benesse.co.jp/development/blockchain/p2p.html)
- [ハッシュ関数を理解する](https://medium.com/blockchain-engineer-blog/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B-48271ff3bb26)

---
この記事はレコチョクのエンジニアブログの記事を転載したものとなります。

https://techblog.recochoku.jp/8017