こんにちは。じゅうぞう ( @Juzo1226 ) です。
仮想通貨の一時期の盛り上がりはすごかったですね。
私もあの盛り上がりに乗っかり仮想通貨に手を出しました。
手を出したからにはブロックチェーン技術を知らないわけにはいかないと思い、仕事の合間にブロックチェーン技術を勉強!
というわけで、今回の記事ではビットコインのブロックチェーン技術についてまとめてみました。
今回は技術的な話が中心ですので、「ビットコインは社会の何を変えるのか?」については、以下の記事を参考にしてください。

ブロックチェーン技術の画期的なポイント
「ネット上の情報はまず疑え!」
大学時代、インターネットに詳しい先輩に口を酸っぱくして言われていました。
口を酸っぱくして言われていたにも関わらず、何度も2chのガセ情報に騙されましたし、変なリンクを踏んでしまったり、ネット上でいくつもの死線をくぐってきました。
騙しが蔓延するような環境ですので、お金の取引などは銀行が間に入って取引を保証するしかなかったんです。
LINEなどのSNSを通して、友人から「お金ちょうだい💛」と言われても、最初は疑ってしまいますよね。
ネット上の様々な取引は、必ず銀行などの第三者機関が間に入り、その信頼の元に取引が行われています。
今は必ず第三者機関の保証が必要なんですね。
ブロックチェーン技術を用いると、第三者機関を介さずに個人間で信頼のおける取引が可能になるんです。
そのため、インターネット以来の画期的な技術として注目されています。
ブロックチェーン技術を具体例で説明
例えば、私は毎月決まった日に不動産屋の口座に家賃を振り込んでいます。
カードからの自動引落しはできないようで、ATMでゆうちょ銀行から千葉銀行にお金を振り込みます。
このとき、振込手数料は必ず432円かかりますし、土日を挟むと振り込みが月曜日になってしまうこともあります。
かなり手間ですし、手数料も高いんですよね。
ブロックチェーン技術をうまく利用すると、この手数料がかなり安くなり、ATMを使わずに一瞬で送金することができるようになるんです。
現状ではまだ技術的な課題があり、手数料は高く送金に時間がかかりますが、近い将来にはスマホでピピっとするだけで家賃が払えるようになる可能性があります。
この理由は、ブロックチェーン技術を使うことで第三者機関である銀行を通す必要がなくなるからなんですね。
銀行は銀行で従業員にお金を払わなければいけないので、手数料などでお金を稼がないといけません。
また、取引を保証するために、内部の閲覧や承認などで時間を必要とします。
特に、国際送金をする場合は、いくつもの銀行を通さなければいけないこともあり、さらに何人もの確認が必要なため、送金に一週間以上かかることもあります。
そのため手数料も高く、途中でミスが発生した場合には送金が完了しないこともあります。
こんな取引が手数料もかからず、一瞬でできるようになったらすごいですよね!
ブロックチェーン技術を用いるとこれが可能になると言われています。
ビットコインのブロックチェーン技術
ブロックチェーン技術は、ビットコインの価値を保証するシステムとして開発されました。
ブロックチェーン上のビットコインの取引情報に間違いがなければ、それは価値のあるものとして保証され、通貨としても使うことができます。
信頼できる情報として金と同じように価値を保証することができるんですね。
ブロックチェーンのブロックとは
ブロックチェーンのブロック内には、ヘッダー部と取引部があります。

Transaction1, 2, 3・・・の部分が取引部になります。
銀行の通帳を想像するとわかると思いますが、取引部には入金、出金の情報が保存されています。
Transactionは”取引”という意味ですね。
ブロックチェーン技術の記事を読むとたくさん出てきます。
ヘッダーには、ブロックのすべての情報が詰まっています。
ブロックチェーンのブロックのヘッダーの情報
ブロックチェーンのブロックのヘッダー部は、”前のブロックの情報“、”nonce値“、”Merkle Root“で構成されています。

「前のブロックの情報」には、前のブロックの情報が入れられます。
「nonce値」には、このブロックが正しいとみんなで証明するための情報が入れられます。あとで詳しく説明します。
「Merkle Root」には、そのブロックの取引情報を1つにまとめた情報が入れられています。
取引情報が少しでも書き換えられると、この「Merkle Root」の値は大きく変わってしまいます。
このヘッダーの情報がブロックチェーン技術の中でもっとも大事な情報になるんです。
この「前のブロックの情報」、「nonce値」、「Merkle Root」を使って、ブロックチェーンに記載されている取引が信頼のあるものかどうかを判断していきます。
ブロックチェーン上のブロックの取引内容を信頼できるものと判断するには?
次はどのようにブロックチェーン上のブロックの取引情報が信頼できるものと判断するかについて説明します。
ブロックチェーン技術では、暗号化技術とP2P(分散)技術を使って、ブロックの情報を信頼できるものと判断しています。
ハッシュ関数による暗号化技術
ハッシュ関数は1方向の関数です。
「ある値」をハッシュ化するとハッシュ値が出てきますが、ハッシュ値から「ある値」を予測することは不可能です。
また、「ある値」が同じであれば、いつも同じハッシュ値を返します。
ハッシュ関数は、ログインのパスワードに使われたりしています。
間違ったパスワードを入れるとログインできませんが、正しいパスワードを入れればログインできます。
当たり前といえば当たり前なんですが、信頼性や安全性を保障するためには、ハッシュ関数を使った暗号化技術が必要になります。

ハッシュ関数を使って、ブロックの取引情報をハッシュ化するとハッシュ値が出てきます。
これが、「Merkle Root」の値になります。
「Merkle Root」には、そのブロックのすべての取引情報が詰められているんです。
ただ、そのハッシュ値から取引情報の詳細はわかりません。
しかし、取引情報がわかればいつでもそのハッシュ値を求めることができます。
ちょっとでも取引情報が改ざんされれば、取引情報のハッシュ値はまったく別の値になってしまいます。
そのため、取引情報の正しいハッシュ値を手に入れるためには、必ず正しい取引情報が必要になります。
ビットコインの取引情報が正しいものと保証するために、このハッシュ関数の性質を利用します。
“前のブロックの情報“と”Merkle Root“はハッシュ関数により得られ、ちょっとでも改ざんされているとまったく別の値になってしまいます。
ハッシュ関数については、次の記事でわかりやすくまとめていますので、興味のある方はぜひ読んでみてください。

ちなみにハッシュ値は次のような感じで出てきます。
16進数の心地よい数値ですね。

ブロックのヘッダーの「nonce値」について
ここで、「nonce値」の説明をします。
「nonce値」は、次のようなクイズで求められる値です。
「前のブロックの情報」と「Merkle Root」と「nonce値」をハッシュ関数に入れたとき、ハッシュ値の頭の3桁が「0」となる「nonce値」を求めなさい!
「前のブロックの情報」と「Merkle Root」は、取引情報から求められる値なので取引情報が確定していれば定数になります。
さて、それではどのようにして「nonce値」を求めれば良いのでしょうか?
ハッシュ関数は一方向の関数です。
ハッシュ値からインプット値は絶対にわかりません。
つまり答えを出すためには、「nonce値」に適当な数値を入れまくって、当たりが出るまで何回もハッシュ値を計算する必要があります。
総当たり戦です!

この計算には莫大な計算量が必要になります。
では、なぜこんな莫大な計算にみなさんは取り組むんでしょう?
答えは簡単です。お金です。
正しい「nonce値」を見つけると報酬がもらえる可能性があるため、ビットコインのシステムの参加者はその報酬目当てに莫大な計算を行います。
この計算の結果、「前のブロックの情報」と「Merkle Root」と「nonce値」が揃います。
さて、それではどうやってこの情報を用いて、そのブロックが信頼のおけるものと判断するのでしょうか。
P2P技術を用いた分散化技術
ブロックチェーン技術の記事では、分散型台帳という言葉をよく見かけます。
ブロックは取引履歴が記載されている台帳なんです。
ビットコインのシステムではその台帳をみんなでシェアします。
つまり、ビットコインの取引履歴が書かれた台帳はみんなに分散されているということです。
P2P技術を使うことで、台帳をみんなに分散するということが可能になっています。
これがビットコインのシステムのキモになり、ブロックチェーン技術の記事で分散型台帳という言葉がよく出てくるのはこのためです。
P2P技術は一昔前にWinMXやWinnyなどのファイル共有ソフトで有名になりましたね。
このP2P技術により、そのブロック(台帳)が正しいかどうかをみんなで多数決を行うんです。
不特定多数の過半数が「正しい!」と言えば、その取引情報は正しいと判断しても構わないだろうということです。
先ほど莫大な計算により、正しい「nonce値」の候補が見つかりました。
「前のブロックの情報」と「Merkle Root」は取引情報から求められますので、見つけられた「nonce値」が本当に正しいかどうかだけ確認できれば、そのブロックの取引情報は正しいと判断できます。
そこで、この「nonce値」の候補が本当に正しいかどうかをみんなで答え合わせをするんですね。

ここで、4番の人は「前のブロックの情報」を間違えてしまっています。
そのため、変な値のハッシュ値で出てきてしまっています。
ただ、これは4番の人が「前のブロックの情報」を間違えただけで、その他の人は正しい値を入れて、候補の「nonce値」が問題ないと確認できています。
不特定多数で多数決を行うため、過半数の人が問題ないと判断すればそのブロックの取引情報は正しい情報であるとできるんですね。
過半数の人たまたま計算を間違えることなんて、まず起こらないわけです。
「1 + 1 = 2」をたまたま過半数の人が間違えちゃうイメージです。
まず、起こりえないですよね。
候補の「nonce値」が正しいと判断され、そのブロックも正しいと判断されると、そのブロックはそこで信頼のおけるものとして凍結されます。
そして、次のブロックが生成されますが、その新しいブロックのヘッダーには前のブロックの情報が入ります。
こうしてどんどんブロックがつながっていくんですね。
このため、この技術はブロックチェーンと呼ばれているわけです。
前のブロックの情報をちょっとでも改ざんしようものなら、「前のブロックの情報」のハッシュ値が変わってしまうので、次のブロックの正しい「nonce値」を求めることができなくるんですね。
つまり、常に正しい「前のブロックの情報」とそのブロックの取引情報が詰められた正しい「Merkle Root」を手に入れないと、正しい「nonce値」は絶対に求められないんです。
こうして、ビットコインのシステムの取引情報は正しいものとして保証されていくわけです。
ブロックチェーン技術の合意形成コンセンサス
ビットコインのブロックチェーン技術では、合意形成コンセンサスとしてPoW(プルーフオブワーク)というものが採用されており、上で説明した方法がPoWになります。
「nonce値」の算出には莫大な計算量が必要と書きましたが、実際には10分間ほどで算出できるようにシステムが組まれています。
この「nonce値」の算出はマイニングと呼ばれ、最初に正しい「nonce値」を算出した人に報酬が支払われます。
ビットコインのシステムで多数決を行うためには不特定多数であることが重要で、過半数が結託するとシステムが崩壊する可能性があります。
この図ように、悪が結託すると間違った情報が登録される可能性があるんですね。

これは51%攻撃と呼ばれておりブロックチェーン技術の問題点の1つとして挙げられますが、実際は51%攻撃を行うメリットはほとんどありません。
このような不正が現実的に可能であれば、ビットコインのシステムの信頼もなくなりますからね。
ビットコインのシステムが信頼できないものであれば、ビットコインの価値も下がってしまいます。
わざわざ結託してビットコインを不正に手に入れても、ビットコイン自体の価値が下がってしまったら意味がないですからね。
何のために一生懸命マイニングしているかわからなくなります。
このことから、この合意形成コンセンサスで51%攻撃が起こることはないだろうと言われています。
合意形成コンセンサスには、PoW以外にもPoS(proof of stake)やPoI(Proof of Importance)などといったものもあり、色々な方法が考えられています。
将来的にどれが主流となるかは現時点ではまだわかっていません。
ただ、PoWは電力の消費が激しいので環境的に良くないので、将来的にはPoWは採用されなくなるのではないかと思っています。
さいごに:未来を感じるブロックチェーン技術
今まで不可能とされてきた問題を解決できるかもしれないブロックチェーン技術は本当にすごいと思います。
未来を感じますね。
特に新しい技術ではなく既存の技術の組み合わせで実現していることにしびれます。
ブロックチェーン技術の応用でどんどん新しいサービスが開発されているので、今の環境があっという間に変わってしまいそうです。
楽しみやら怖いやらです。
勉強が追い付く気がしないですね。
私もなるべく時代に置いて行かれないように勉強を頑張りますが、みなさんもこの記事で少しでもブロックチェーン技術を理解していただけたら幸いです。
さあ、というわけで次はどの通貨を買おうか迷うところですね。