#はじめに
前回、ブロックチェーン基礎の基礎でブロックチェーンのイメージについて説明したので、ブロックチェーンの定義、種類、技術など、もう少し詳しくブロックチェーンについてみていきます。
#ブロックチェーンの定義
日本ブロックチェーン協会(JBA)では、狭義のブロックチェーンを以下のように定義しています。
「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」
これだけではよく分からないと思いますが、簡単に説明すると、**「嘘をつく可能性がある参加者や、正常に動作していない参加者を含む不特定多数の参加者がいる中であってもこのネットワークで得られた合意は時間が経つにつれて覆る可能性が0に近づく仕組み」**ということになります。
JBAの定義では上のようになってはいますが、この定義に従うものだけがブロックチェーンというわけではなく、いまではかなり広い意味でブロックチェーンという言葉が使われることも多いので参考程度にとどめておいてよいでしょう。
#ブロックチェーンの種類
ブロックチェーンには大きく分けて、以下の2種類あります。
- パブリックチェーン
- プライベートチェーン
パブリックチェーンは、このネットワークに参加する人を制限せず、誰でも自由に参加することができるブロックチェーンで、プライベートチェーンは、参加する人を制限し、特定の人しか参加することができないブロックチェーンです。
これらの2種類のブロックチェーンは、次節で説明しますが、合意に用いられるアルゴリズム(コンセンサスアルゴリズム)や、メリット、デメリットなどもかなり異なっています。
パブリックチェーン | プライベートチェーン | |
---|---|---|
参加者 | 誰でも自由に参加可能 | 特定の人のみ参加可能 |
メリット | 管理者が不要 改ざんが不可能 |
仕様変更が容易 取引手数料が不要 |
コンセンサスアルゴリズム | PoW、PoS | PBFT |
使用例 | Bitcoin Ethereum nem |
Ripple Ethereum HyperledgerFabric |
#ブロックチェーンを支える技術
ブロックチェーンを構成する技術はたくさんありますが、その中から主なものを説明します。
- ハッシュ関数
- 公開鍵暗号方式
- コンセンサスアルゴリズム
もちろん、ブロックチェーンの一種であるビットコインでもこれらの技術は用いられているので、これらがビットコインにおいてどのように用いられているかについても説明します。
1. ハッシュ関数
前回も簡単に説明しましたが、ハッシュ関数は、以下のような特徴を持っています。
- 入力データに関わらず出力データ(ハッシュ値)は固定長になる
- ハッシュ値から元の入力データを推定することが非常に困難である
- 同じ入力データを与えるといつも同じハッシュ値を返す
ブロックチェーンでよく用いられるハッシュ関数SHA256での一例を示します。
上の図より、一文字違うだけで、まったく異なったハッシュ値が固定長で返ってくることが分かります。ビットコインにおいては、ユーザーの口座番号であるビットコインアドレスとして使われています。
2. 公開鍵暗号方式
ブロックチェーンでは公開鍵暗号技術として「楕円曲線暗号」がよく用いられます。公開鍵暗号の仕組みについてですが、まず、送信者Aは受信者Bさんの公開鍵で平文を暗号化してBさんに送信します。Bさんの公開鍵で暗号化した平文はBさんの秘密鍵でしか復号することができないので、この仕組みを用いて安全に文書を送信することができます。
また、ビットコインではこの技術を使ったデジタル署名という技術も用いられています。この技術を使うと、AさんからBさんへ送金をおこなった場合、本当にAさんが送金したかどうかの本人確認ができます。
3. コンセンサスアルゴリズム
ブロックチェーンは中央集権的に管理されているわけではないので、取引が不正なく正しいことを参加者自身で確認する必要があります。ブロックチェーンの定義のところで述べたように、嘘をつく参加者がいる可能性があることを前提に適切にこの合意の仕組みを決める必要があり、この仕組みのことをコンセンサスアルゴリズムと呼びます。
コンセンサスアルゴリズムにはいくつか種類があるのですが、ここではビットコインで用いられている**PoW(Proof of Work)**について説明します。
ビットコインで新しいブロックを生成するとき、無条件に生成するというわけにはいかないので、「先頭に、一定の数以上の0が並んでいる」ハッシュ値を持つブロックのみを正しいブロックであるとみなすようになっています。
ハッシュ値はナンス値からハッシュ関数を用いて求められますが、ハッシュ関数の性質により、このハッシュ値からナンス値を求めることは極めて難しいものとなっています。したがって、ブロックを生成するために必要な条件を満たしたハッシュ値を探すためには、ナンス値を変えていって総当りで探すしか方法がないのです。
このナンス値を探す行為を「マイニング」と呼び、条件に合うナンス値を発見した人には報酬が与えられることになっています。さらに、取引を改ざんして不正なブロックを生成するには、そのブロックだけでなくそれ以降の全てのブロックも改ざんする必要があるので、不正するよりもマイニングに参加して報酬を得る方がコストパフォーマンスがよく、不正を働きにくいということになります。
PoWはナンス値の発見のために大量の電力が必要であるため、この問題を解決するために、ナンス値ではなくコインの保有量などを基準にブロック生成者を決定する**PoS(Proof of Stake)**など、様々なコンセンサスアルゴリズムが存在します。