2020.08.07
2022.01.21
Fabeee社員ブログ
目次
はじめに
Fabeee株式会社でPythonとBigQueryに奮闘しているちくりんです。
今回は、これを使って何かできないか!?と日々模索している技術、ブロックチェーンについて書かせていただきたいと思います。
・ブロックチェーンはなんとなくわかるけど、どう実装されているんだろう
・ブロックチェーンを実はよく知らない
など、まだまだ導入障壁の高い技術ではありますが、図解も交えてまとめていきます。
僕自身、活字を大量に見るだけで頭が痛くなってしまう性分なので、本当に簡潔にまとめさせていただきますね!
ブロックチェーンとは
すでに知っているという方は読み飛ばしてください。
ブロックチェーン[1][2][3](英語: Blockchain、もともとはブロック・チェーン[4][5])は、暗号技術を使ってリンクされたブロックと呼ばれるレコードの増大するリストである。各ブロックには、前のブロックの暗号化ハッシュ 、タイムスタンプ、トランザクションデータ(一般的にはマークルツリーで表される)が含まれている。
設計上、ブロックチェーンはデータの改変に強い。ブロックチェーンは、「2つの当事者間の取引を効率的かつ検証可能で恒久的な方法で記録することができるオープンな分散型台帳」である[6]。分散型台帳として使用する場合、ブロックチェーンは通常、ピアツーピアのネットワークによって管理され、ノード間通信と新しいブロックの検証のためのプロトコルに準拠している。一度記録されたブロックのデータは、後続のすべてのブロックを変更しない限り、遡及的に変更することはできない。ブロックチェーンの記録は変更不可能ではないが、ブロックチェーンは設計上安全であると考えられ、高いビザンチンフォールトトレランスを持つ分散型コンピューティングシステムの例とされている。したがって、分散型コンセンサスがブロックチェーンで主張されてきた[7]。
ブロックチェーンは、2008年にサトシ・ナカモトという名前を使った人物(またはグループ)が、暗号通貨ビットコインの公開取引台帳としての役割を果たすために発明したものである[1]。
中略
出典: フリー百科事典『ウィキペディア(Wikipedia)』
なんだか難しい日本語が多くてよくわからないですね….
ここから噛み砕いて説明していきます。
ブロックチェーンってそもそもなんなの?
ここでは、お金(仮想通貨)を他の人に送受信することを例に挙げて解説します。
仮想通貨についてよくわからない方もいらっしゃると思いますので、”お金”という表現をさせていただきますね。
まずはこの図をご覧ください。
現在、多数のシステムは”中央集権型”と呼ばれる、データを「1箇所にまとめて管理」するシステムが主流となっています。
それに対して、ブロックチェーンネットワークは、「サーバーを持っているみんなで管理」するシステムになります。
これだけではまだわかりづらいですよね。
ここから、実際に銀行を使った送金を例にとって詳しく解説します。
AさんからBさんへ送金する事例をもとにブロックチェーンを理解する
1. 中央集権型での送金
中央集権型のおさらいです。サラッと読んでしまってください。
従来の中央集権型のシステムでは、真ん中に全てのデータを管理するサーバーを置くことが特徴となっています。
皆さんは、お金を送金したい場合、ATMやWebでお金を送金しますね。
AさんからBさんへ送金する場合、
・AさんがBさんに送金したい金額のデータを中央に送る
・送られた情報をもとに中央からBさんの口座に送金する
という感じで、送金のトランザクション(取引)は全て中央で管理されます。
これは、使う人たちが”中央のシステムに絶対の信頼を置いて“使っているということになります。
逆に言えば、中央で管理するネットワークにハッキングされた場合、
「中央で管理しているデータを改ざんされてお金がとられた!!」となってしまいますね。
2. ブロックチェーンの送金
それに対し、ブロックチェーンのシステムでは、従来の中央集権型のシステムのように真ん中に管理するサーバーをおかないことが特徴となっています。
データを管理するサーバーを分散するという発想ですね。
中央集権型では銀行がサーバーを用意しているのに対し、ブロックチェーン型は個人がサーバーを提供しています。
個人が提供しているサーバーの集合体が、みんなで同じトランザクション(取引)を管理するようになります。
では、どのようにみんなで同じトランザクションを管理するのでしょうか。
次の図をご覧ください。
ブロックチェーン型は、その名の通り、ブロックを連結させるようなイメージで取引履歴を管理します。
各ブロックにトランザクション(取引内容)を入れて、それを一つの塊としてブロックを作ったら、このブロックのハッシュというものを生成し、また次のブロックを作成したときに前のハッシュの情報を作成したブロックに入れる。
AさんがBさんにお金を送る場合、新しいトランザクション(取引内容)が生成されて、新しいブロックが作成されます。
作成されたブロックをブロックチェーンにつなげることで取引が安全に承認されたことになります。
ですが、勝手にブロックをつなげられるかといえばそうではなく、個人が提供しているサーバーの集合体がみんなで承認することで、初めて作成されたブロックがチェーンに結びつくようになります。みんなで取引を監視している状態ですね。
チェーンに結びついた新しいブロックには、
・トランザクション(取引内容) ・ひとつ前のブロックの内容から作られるハッシュ ・ナンス ・ブロックが作成された時間(Timestamp)
の情報が入ります。
では、どのようにみんなで監視しているのでしょうか?
ブロックチェーンの情報は、個人が提供しているサーバーのそれぞれで全く同じ情報が保存されているので、サーバーを所有しているみんながブロックチェーンの取引内容を確認することができます。
どれか一つブロックを書き換えて、自分に有利な取引内容に書き換えたとしても、
・他のサーバーと情報が違う ・書き換えたブロックのハッシュと次のブロックのハッシュが異なる
ため、極めて改ざんが難しい仕組みなのです。
サーバーを全てハッキングしたら改ざんできる!?と思うかもしれませんが、(仮想通貨の場合)世界中に散らばったサーバー全てにハッキングを行うことは容易ではないため、極めて安全な仕組みとなっています。
ハッキングの方法に51%アタックというものもありますが、それだけでブログが1つ書けてしまう内容なので割愛させていただきますね。
3. マイニング
先ほど、ブロックチェーンの情報は個人が提供しているサーバーで管理するとお話ししましたが、単にサーバーをお金を出して買って、ブロックチェーンのネットワークに参加してもメリットがないですよね。
そこで、何かしら報酬が欲しいということで、サーバーを提供している人が報酬を得る方法があります。
それが、マイニングです。
ここで重要になってくるのは、チェーンに結びついたブロックが持っているナンス(nonce)という値です。
ナンス(nonce)とは、次のブロックと前のブロックをチェーンで繋ぐときに行う、あるアルゴリズムの計算の解のこと。
このナンスを求めて、初めてチェーンにブロックが繋がるという決まりがあります。
個人が提供している各サーバーでこの計算を行い解を求めるのですが、これを見つけた人がチェーンを結び付けられて、それによる報酬をもらうことになります。(仮想通貨の場合は、自分に幾らかの仮想通貨が入ってくるイメージ)
ナンス(nonce)を導き出すアルゴリズムを、コンセンサスアルゴリズムと言います。
こんな感じです。
challenge + Prev Hash + 取引(Transaction)
challengeという新しい値が出てきましたね。結論から言うと、このchallengeの値がナンス(nonce)になります。
前のブロックに格納されているハッシュ値(Prev Hash)と取引(transaction)を足し合わせたものに、0から順に値を足してハッシュを生成します。
0 + Prev Hash + 取引(transaction)
1 + Prev Hash + 取引(transaction)
2 + Prev Hash + 取引(transaction)
…
ハッシュを生成すると、”f19je43i90wam85023492″のようにハッシュ値が取得できます。
このハッシュ値の先頭数桁が全て0となるchallengeの値が、nonceの解となります。
先頭3桁の場合、”000fewa8cewaklfwa3wa”のようになったら計算終了です。このとき、challengeの値が124だったら、nonceに124を入れてブロックをチェーンに結びつけることができます。
0になる先頭の桁数を増やすことでより難解となり、それに伴い計算時間もかかります。
最後に
いかがでしたでしょうか。
少しでもブロックチェーンのことを理解していただけたのであれば嬉しいことこの上ないです!
ですが、座学だけではまだわからない!!という方のために、次回は簡単な実装編をご用意したいと思います。
乞うご期待!
AIコンサル/SES/受託開発のご依頼についてはこちら