day2. ブロックチェーンを構成する技術要素

このガイドでは、ブロックチェーンで構成するキーとなる技術要素とその概要を見ていきます。 ブロックチェーンの構造を見るのに、とてもわかり易いサイト(Anders Brownworth氏のサイト)があるので、このサイトを使いながら理解を深めていきましょう。

このガイドでは、ブロックチェーンで構成するキーとなる技術要素とその概要を見ていきます。
ブロックチェーンの構造を見るのに、とてもわかり易いサイト(Anders Brownworth氏のサイト)があるので、このサイトを使いながら理解を深めていきましょう。

TOC

ブロックチェーンのデータ構造

ハッシュ(hash)暗号

ハッシュとは任意の長さの文字列を特定の長さの文字列に変換する暗号方式です。変換する際には、一方向の変換のみが可能で暗号結果から元のデータを作ることはできません(不可逆性)。

ハッシュ暗号には様々な種類のものがありますが、Ethereumの場合だと、keccak256という方式が採用されています。先述のサイトのハッシュのデモページでは、SHA256方式が使われています。いずれも256bit=32byteのデータです。
以下の画像の「データ」のところが任意のインプット文字列で、暗号結果が「ハッシュ」の箇所になります。結果の値は、0〜9とa〜fの文字で表現されます(16進数)。
インプットとなる文字列を修正すると、結果の値も変化します。

先述のサイトのハッシュのデモページでは、SHA256方式が使われています。256bit=32byteのデータです。

ブロック

ブロックチェーンは、英語では、Block(塊が)-Chain(繋がっているもの=鎖)、と分解できます。要するにブロックが鎖のように複数つながって、できているものです。では、ブロックとは何か?
ブロックはデータの塊の単位のことで、大まかに言えば、ブロックチェーンの場合、画像のような構造をしたデータの塊をブロックと呼んでいます(デモページ)。

ブロックは、ブロック、ノンス、データ、ハッシュ等からなります(本当はもっとたくさんのフィールドがあります)

では、ブロックのフィールドは、それぞれどのような意味を持っているのでしょうか?

  • ブロック: # … ブロックはそれぞれ番号を持っています
  • ノンス … ノンスはブロックのデータが正しいことを検証するために用いられるデータです
  • データ … 実際のデータが入ります
  • ハッシュ … 上記までの値をハッシュ暗号方式で変換した値です

このデータがブロックチェーンに書き込まれるには、条件を満たず必要があります。条件とは、ハッシュが”0000″からはじまるような値になるノンスの値であること、です。73608の場合は、ハッシュ値がdba3…となっており、条件を満たしていません(なのでわかりやすく赤い背景になっています)。

ハッシュ値が0000からはじまるような値がノンスの値であること、を満たす必要があります。

「掘る(マイニング)」ボタンを押すと、合致するノンス値を探そうとします。結果は、60616で、この場合は、ハッシュ値が0000から始まっており、条件を満たしています。

ブロックチェーン

ブロックチェーンは上記のブロックのようなデータ構造をしたブロックが多数繋がっているものになります。では、つながりは、どう表現されるのでしょうか?(デモページ
次の画像に、「前」と記載がありますが、これは一つ前のブロックのハッシュ値になります。

ブロックが多数繋がっているものがブロックチェーンです。前後のつながりは、前のブロックのハッシュ値を持つことによって

ここで、試しに4番目のブロックのデータを変更すると次の画像のようにハッシュ値が変わってしまいます。また、4番目のハッシュ値が変わったことにより、5番目のハッシュ値も変わってしまいました。つまり、4番目と5番目のブロックのハッシュ値がいずれも0000から始まらないハッシュ値となり、条件に適合しなくなってしまいました。

4つ目のブロックの値を変更すると、4つ目と5つ目のブロックのハッシュ値が条件を満たさない値になります。
  1. 仮に前のブロックのデータが変更された場合、前のブロックのハッシュ値も変更となる。結果として現在のブロックのハッシュ値も変わってしまう。 
  2. 途中のブロックのデータを変更した場合、以降のブロックすべてのデータについて計算し直す必要がある。

前に説明した、ブロックチェーンの”不変性”は、この特徴によるものです。つまり、ある時点のデータを修正しようとすると以降のデータをすべて変更する必要があります。

分散性

ここまでは、ブロックチェーンのデータ構造を見てきましたが、これらのデータは、多数のコンピュータによって分散して、保持されています(それぞれのノードで同一のデータを保持しています)。(デモページ

上記の画像で、仮にピアBのデータが不正に書き換えられたとしましょう。その場合のピアA、ピアBそれぞれの5番目のブロックのハッシュ値を見てみると、値は異なっているようです。つまり、ピアBの値だけが異なっており、明示的に悪意のある行動がされているということが検知できます。このような場合、ピアBはネットワークから除外されます。

参考)
デモページの4つ目では、データとして各取引(誰から誰にいくら分のトークンを送金したか)が含まれています。この中のいづれかを変えた場合でもこれまで見てきた例と同様に誤った値や再計算が必要である状態が検知されます。

公開暗号方式を用いた署名

公開鍵暗号方式

公開鍵暗号方式とは、公開鍵と秘密鍵という2種類の鍵によって、データ送受信における安全性を高める仕組みです。たとえば、AさんがBさんにメッセージを送りたい場合

  1. Bさんは秘密鍵と公開鍵を作成する
  2. AさんはBさんの公開鍵を取得し、それでメッセージを暗号化する
  3. Aさんは暗号文を送る
  4. Bさんは暗号文を秘密鍵で復号化する

公開鍵は秘密鍵から作成されます(デモページ)。

公開鍵暗号方式を用いた署名

ブロックチェーンでは、公開鍵暗号方式を用いて、「署名」というものを作成します。取引データを送信する場合、送信者は、自分の秘密鍵でメッセージを暗号化し、署名を作成します。(デモページ

公開鍵暗号方式を用いてメッセージの署名を作成します。

データの受信者は、メッセージと公開鍵、署名を受け取り、受け取ったメッセージが改ざんされているかどうかを検証します。次の画像の例では、署名した際とは異なるメッセージで受信されており、結果的に検証はNG(背景が赤)となっています。この際の公開鍵は、署名された際の秘密鍵とペアになるものです。

受信者はメッセージ、公開鍵、署名からメッセージが改ざんされていないことを検証します。

上記のメッセージが取引データになっても同様の仕組みで動きます。ただし、ここでは、Fromに記載されているものが公開鍵と同じものになります。

取引データを送信する際に署名を作成します。
受信したメッセージと署名、公開鍵から改ざんされているかどうかを検証します

検証の結果が問題なかった場合、該当の取引データ(トランザクション)はネットワーク中に伝播され、やがてネットワーク全体に広がっていきます。

ここまでの内容をブロックチェーンに適用した例が、最後のデモページになります。
仮に一番最後のブロックの一番最初のトランザクションの総金額を7ドルから変更した場合、ブロック全体がNGになるのと同時に該当のトランザクションの署名も赤く表示されます。これは、トランザクションデータと署名の値が合致しないためにエラーとなっていることを示しています。

ブロックチェーンの一つの取引データが書き換えられた場合、そのブロックがエラーとなるだけではなく、該当の行もエラーであることがすぐに分かります。

ご意見をお聞かせください!

web3チュートリアルシリーズについてのご意見を是非お聞かせください。

この記事、または、web3チュートリアル全体について、是非、あなたのご意見をお聞かせください。
アンケートはこちらからご回答いただけます。

無料相談承ります

ITの専門家が無料相談を受け付けます。web3以外のテーマでもOKです。

オンラインでの無料相談を承っています。ご希望の方は、お問い合わせフォームよりご連絡ください。
ITの専門家があなたのご質問にお答えいたします。

Let's share this post !

Author of this article

After joining IBM in 2004, the author gained extensive experience in developing and maintaining distributed systems, primarily web-based, as an engineer and PM. Later, he founded his own company, designing and developing mobile applications and backend services. He is currently leading a Tech team at a venture company specializing in robo-advisory.

Comments

To comment

CAPTCHA


TOC