見出し画像

ブロックチェーンの仕組み|詳解ビットコイン⑩

『詳解ビットコイン』(Kalle Rosenbaum著、オライリージャパン)を読んでいます。その個人的なまとめとして書いていきます。

ビットコインがブロックチェーンを使うわけ

ビットコインでは、検証済みのトランザクション情報などは、ブロックチェーンとして整理・管理されています。

Excelのような単純な形式でもデータの管理は行えますが、いくつか問題が生じてしまいます。どのような問題が生じるかは次の項目に記載していきます。

Excelを使って管理する場合

たとえば誰かが、格納されたトランザクションを変更したり、トランザクションごと削除したりした場合に、周りのユーザーはそれに気づきづらくなります。

仮に、ジョンがトランザクションの格納を担当しているとします。今回ジョンは車を購入するために、アリスに1BTCを送るというトランザクションを作成していて、そのトランザクションをExcelに格納したとします。

ジョンが 1BTC を支払ったことを確認したアリスは、ジョンに車を渡します。

もしジョンが、車を受け取った後に、1BTCを送るというトランザクションをExcelから削除したり、改ざんしたりしたらどうでしょうか。ジョンは代金を払わずに車を得ようとしているのです。

アリスはそのことに気づく可能性が高いですが、変更が加えられる前の状態を示せません。仮に、もともとのトランザクションが含まれたExcelシートを保有している人が複数いたとしても、彼らがジョンをはめ込もうとアリスと共謀しているだけかもしれません。

ブロックチェーンを活用すれば、上記のような改ざんがあったことを証明できるようになります。

ブロックチェーンを活用する場合

前置きになりますが、ブロックチェーンでは”ブロック”と呼ばれるものの中にトランザクションが含められています。ブロックはまた、ひとつ前のブロックの情報を含んでおり、この点で前後のブロック同士がつながっていう状態になっていて、それでブロック”チェーン”というわけです。

ブロックチェーンはデータの集合体で、この点でExcelファイルと似たようなものです。Excelファイルと比較しながら説明されることもあり、その場合のよくある説明は、「ブロックチェーンがExcelファイルで、ブロックがExcel内のシートに相当する」というものです。

さて、このブロックチェーンを活用すると、ブロック内の情報に手が加えられたかどうかが検証できるようになります。また、それ以前のブロックに変化があるかどうかも検証できます。

もし改ざんがあったとしても、改ざんがあった事実を証明できるようになり、不正を防げるというわけです。

なぜ、変更が加えられたかがわかるのでしょうか。この疑問はブロックの中身について知るとある程度解消されます。

ブロックの中身

それぞれのブロックの中では、トランザクションが左から右へと順に並べられています。また、ブロックヘッダーという要素も存在します。

ブロックヘッダーには様々なものが含まれていて、その中身をより細かく表すと下図のようになります。

ブロックヘッダーの要素について、それぞれ説明していきます。

マークルルート

ここでのマークルルートは、そのブロックに含まれるすべてのトランザクションを元にし、そこから算出されたハッシュです。

マークルルートのおかげでトランザクションの改ざんや削除があったことを証明できます。マークルルートは、ブロックに含まれるトランザクションを元に作られた値です。仮にブロック内のトランザクションに変更があれば、マークルルートの数字が一致しないので、変更があったことに気づけます。

タイムスタンプ

タイムスタンプ(上図では時計マーク)は、ブロックを作成した時刻を表すものです。「〇年〇月〇日、〇時〇分〇秒、UTC」といったように記載されます。時刻が妥当な範囲に収まっているかを検証者に確認されます。

ターゲットとナンス

ターゲットとナンスは、プルーフ・オブ・ワーク(作業による証明)を完了させる上で重要になる数値です。

ターゲットは「0.0000012」のような数字です。試験の合格点のようなもので、有効なプルーフ・オブ・ワークだと認めてもらうためには、ターゲットの数値を下回る必要があります。ターゲットの数値を下回るには、ブロック生成者は様々な数字、例えば「1」「1003」「50081」などを「ナンス」として当てはめてみます。そして当てはめた結果、ターゲットを下回っているかを確認します。ブロック生成者たちは報酬目当てで様々なナンスを当てはめ、ターゲットの条件を満たすナンスを探り当てようとするわけです。

重要なことは、ターゲットがころころ変わることはないものの、条件に合うナンスはブロックの中身が少し変わるだけでガラリと変わります。トランザクションなどがほんの少しでも変更されれば、ナンスを一からを探り当てないといけません。

ブロックの検証者たちは、ターゲットを満たすようなナンスが記録されていなければ、プルーフ・オブ・ワークが有効ではないとしてそのブロックを無効と判定します。

マークルルートには、トランザクションが書き換えられていないかを見張る役割がありました。これと同じようにターゲットやナンスには、それ以前のブロックヘッダーが書き換えられていないかを見張る役割があるといえます。

ブロックID

ブロックIDとは、ひとつ前のブロックヘッダーをダブルSHA-256でハッシングした出力のことです。

ブロックIDはひとつ前のブロックヘッダーを元にしているので、とあるブロックのブロックヘッダーに誤りがあったとしたら、それより後のすべてのブロックは、ブロックヘッダーが誤っているので無効となります。

これによって、ブロック生成者がトランザクションを改ざんをしようとした場合、不正を働きたいトランザクションが含まれた場所(ブロック)から現在までの、すべてのブロックを新しく作り直すという労力をかけないといけません。しかも、素早くブロックを作っていかないとその時点で一番新しいブロックまでたどり着けません。このようにブロックを作り直す作業は大変で、やればやるだけ損をしていく可能性が高く、改ざんの防止につながっています。

また、この改ざんを達成したとしても、改ざんがあったということで BTC 価格は暴落する可能性があります。不正をした人も BTCを保有しているはずで、この暴落に巻き込まれるかもしれません。そのため、「莫大なお金をはたいてでも壊したい」という、よっぽどビットコインを憎んでいる人がいない限りこのような攻撃はされないだろうといわれています。

読み落としでなければですが、ブロックを受け取ったフルノードがどのような検証を行うかが本書には細かく書かれていません。そのため、ブロックIDがどのように役立つかがいまいち理解できませんでした。ただ、次のような方式なのではと予想しました。

①そのブロック内のトランザクションを検証
②そのブロック内のヘッダーを検証
※そのヘッダーにあるブロックIDが、自分が記録しているブロックIDと異なる場合、ノードは遡って検証する。つまり、提出されたブロックのひとつ前のブロックを「①」「②」の要領で検証し、自分が検証済みのブロックIDが出てくるまで遡る。

この記事が気に入ったらサポートをしてみませんか?