こんにちは。 ディベロップメントサービス1課の山本です。
「Amazon Managed Blockchain」を利用したいと思ったのですが、ブロックチェーンについての知識が少なかったので、まずはブロックチェーンについて学んでみました。
今回の記事では、そのブロックチェーンの基本について説明します。
そして、次回以降の記事で「Amazon Managed Blockchain」について詳しく解説していきたいと思います。
この記事の対象者は?
- ブロックチェーンについて初めて学ぶ方
- ブロックチェーンの基本的な知識を確認したい方
- 「Amazon Managed Blockchain」の利用を検討している方(詳細は次回以降の記事で)
ブロックチェーンとは
ブロックチェーンは、分散型のデータベースシステムです。
取引やデータの記録を「ブロック」と呼ばれるデータの塊に保存し、それらを連鎖的につなげていく技術です。
各ブロックは、特殊な値(ハッシュ値)によって前のブロックとリンクされており、これによりデータの一貫性が保証されます。
ネットワーク
ブロックチェーンは、P2P(Peer to Peer)と呼ばれるネットワーク方式を採用しています。これは、ネットワーク上の各参加者(ノード)が等しく、直接通信を行う方式です。
P2P ネットワークでは、各ノードがブロックチェーンの全コピーを保持するため、ネットワーク全体の透明性が確保され、データの改ざんが非常に困難になります。
またネットワークが分散しているため、一部のノードがダウンしてもネットワーク全体の運用に影響を与えません。
このように、データを管理する台帳がネットワーク上で分散しているため、分散型台帳とも呼ばれます。
データベース
始めにデータベースのイメージ図を再度掲載します。
この図を基に、ブロックチェーンデータベースの内容を詳しく解説していきます。
ハッシュ値
ブロックに格納されているデータの中で、特に重要なのが「ハッシュ値」です。
ハッシュ値は、元のデータを特定の計算手順(ハッシュ関数)で変換した結果のことを指します。
この変換のことを「ハッシュ化」と言います。
ハッシュ化の特徴は以下の通りです:
- 入力値が少しでも違うと、出力結果が全く異なる。
- 出力値の長さは、常に一定。
- 出力値から元の入力値を求めることは、ほぼ不可能。
例えば Python で、「SHA-256」というハッシュ関数を使って、"dog"と"dot"という似たような単語をハッシュ化してみます。
import hashlib word1 = "dog" word2 = "dot" hash1 = hashlib.sha256(word1.encode()).hexdigest() hash2 = hashlib.sha256(word2.encode()).hexdigest() print("{}_hash:{}".format(word1, hash1)) print("{}_hash:{}".format(word2, hash2))
このプログラムを実行すると、以下のような結果が得られます。
dog_hash:cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944 dot_hash:e392dad8b08599f74d4819cd291feef81ab4389e0a6fae2b1286f99411b0c7ca
"dog"と"dot"は一文字違いですが、ハッシュ値は全く異なります。これがハッシュ化の特徴です。
nonce(ナンス)
ブロックには「nonce(ナンス)」と呼ばれるデータも格納されています。
nonce は「Number used once(一度だけ使われる数)」の略で、ブロックを生成する際に一度だけ使われる数値です。
ブロックを生成する際には、特定のルールがあります。それは、
- ブロックのデータをハッシュ化した値の先頭が
0
で始まること。
です。例えば、以下のようなハッシュ値が生成されることが求められます。
dog_hash:0000000000966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944
ブロックのデータに追加して、ハッシュ値を調整するために使われるのが nonce という数値です。
試しに、先頭 6 桁が0
になる nonce を見つけてみましょう。(下記のプログラムはあくまで例です。)
import hashlib word1 = "dog" nonce = 0 while True: block_data = word1 + str(nonce) hash1 = hashlib.sha256(block_data.encode()).hexdigest() if hash1[0:6] == "000000": print("nonce:{}".format(nonce)) break nonce += 1 print("{}_hash:{}".format(word1, hash1))
このプログラムを実行すると、以下のような結果が得られます。
nonce:4158365 dog_hash:0000007b3c7e733f8f72097d6dfb9e55ac2dc04853d01c085182f9e60c546d01
この結果からわかるように、先頭 6 桁が 0 になる nonce を見つけるためには、約 415 万回の計算が必要でした。
先頭が 10 桁以上の 0 になるような nonce を見つけるためには、それ以上の計算が必要になります。
この nonce を計算する作業をよく耳にする「マイニング」と呼びます。
マイニングの難易度をハッシュ値の先頭に必要な0
の数で調整して、仮想通貨の流通量を制限しているらしいです。
取引データ
この部分には、具体的な取引の詳細が記録されます。
例えば、誰が誰にどれだけのビットコインを送ったか、といった情報がここに格納されます。
ブロックチェーンの基本的な概念からは少し外れるので、ここでは詳細な説明は省きます。
データの改ざんは可能なのか?
ブロックチェーンのデータ改ざんは理論的に可能ですが、実際は極めて困難です。
なぜなら、ブロック一つを改ざんするとそれ以降の全ブロックのハッシュ値が変わり、nonce の再計算を全てやり直す必要があるからです。
時間と計算量が圧倒的に足りない。。。
ブロックチェーンの種類とその特徴
ブロックチェーンは、その利用方法や目的によって、大きく 3 つの種類に分けられます。
それぞれ「パブリックブロックチェーン」、「プライベートブロックチェーン」、「コンソーシアムブロックチェーン」と呼ばれています。
パブリックブロックチェーン
パブリックブロックチェーンは、その名の通り誰でも自由に参加できるブロックチェーンの形式です。
ビットコインやイーサリアムなど、よく耳にする仮想通貨の背後にあるのがこのパブリックブロックチェーンです。
この形式のブロックチェーンでは、全ての参加者(ノード)が取引の正当性を確認し、新たなブロックをチェーンに追加することができます。
この正当性の確認には「コンセンサスアルゴリズム」と呼ばれる仕組みを用いて、全てのノードが一致した情報をブロックチェーンに追加します。
中央に管理者がいるわけではなく、全ての参加者が等しくブロックチェーンを管理している仕組みとなります。
そのため、パブリックブロックチェーンは透明性が高く、セキュリティも強固です。
しかし、その反面、全ての取引を全ての参加者が確認しなければならないため、大量の取引を処理するのに時間がかかるという課題があります。
プライベートブロックチェーン
プライベートブロックチェーンは、特定の組織やグループだけが利用できるブロックチェーンの形式です。
この形式では、参加者は事前に承認された人だけで、ネットワークの管理者が存在します。これにより、制御が容易でプライバシーも守られます。
企業内部の業務処理や、特定のグループ間での取引記録などに使用されます。 全ての参加者が全ての取引を確認する必要がないため、大量の取引を処理するのに時間がかかるという問題を解決しています。
しかし、一方で、中央管理者が存在するため、分散型システムの持つ改ざん防止や透明性の利点が一部失われる可能性があります。
コンソーシアムブロックチェーン
コンソーシアムブロックチェーンは、パブリックブロックチェーンとプライベートブロックチェーンの中間的な形式で、特定のグループや組織(コンソーシアム)だけが参加できます。
この形式の特徴は、ネットワークの管理者が一人ではなくコンソーシアムのメンバー全員が管理者となり、新しいブロックの追加を行うことができる点です。
プライベートブロックチェーンと同様に、参加者が限定されているため、取引速度が速いというメリットもあります。
また、この多数の管理者による運用の結果、その取引の詳細はメンバーだけでなく一般の人々にも公開されることがあり、透明性が高くなります。
コンソーシアムブロックチェーンは、プライベートブロックチェーンの制御の容易さとパブリックブロックチェーンの透明性を兼ね備えています。
そのため金融機関や供給チェーン管理など、特定の業界内での共同業務によく使用されます。
各ブロックチェーンの種類まとめ
パブリックブロックチェーン | プライベートブロックチェーン | コンソーシアムブロックチェーン | |
---|---|---|---|
参加者 | 誰でも | 承認された者のみ | コンソーシアムのメンバーのみ |
透明性 | 高い | 低い | 中程度 |
制御性 | 低い(分散型) | 高い(中央管理者あり) | 中程度(メンバーが管理) |
スケーラビリティ | 低い | 高い | 中程度 |
用途 | 仮想通貨など | 企業内業務、特定グループ間取引 | 業界内共同業務(金融、供給チェーン管理など) |
ブロックチェーンの技術
これまでの章では、ブロックチェーンの基本的な特性について説明しました。 次の章では、重要な技術であるスマートコントラクトとコンセンサスアルゴリズムについて詳しく説明します。
スマートコントラクト
ブロックチェーンの大きな特性は、取引の透明性と改ざん防止です。
これらの特性を最大限に活用し、さらにブロックチェーンの可能性を広げるために開発されたのが「スマートコントラクト」です。
スマートコントラクトは、特定の条件が満たされたときに自動的に実行されるプログラムのことを指します。
取引の条件をプログラムコードとして記述し、そのコードをブロックチェーンにデプロイします。
そして、その条件が満たされると、コントラクトが自動的に実行され、取引が完了します。
スマートコントラクトを利用する際には、その自動実行性から利用者が取引条件や実行条件を理解し、明示的に合意した上で使用する必要があります。
このスマートコントラクトの技術は、中間者を必要としない取引を可能にし、取引の透明性を確保しながら、効率性と速度を大幅に向上させることができます。
金融サービス、不動産取引、供給チェーン管理など、さまざまな業界で既に活用されています。
自動販売機の例
理解を深めるため、スマートコントラクトと同じ中間者を必要としないシステムである、自動販売機に置き換えてみます。
自動販売機は、お金を投入し商品のボタンを押すと、飲み物が自動で出てくるシステムです。
まず、管理者が飲み物の価格や購入方法といった「取引条件」を決めるのが、スマートコントラクトの実装です。
次に、飲み物の価格や購入方法を自動販売機に設定するのが、スマートコントラクトのデプロイです。
そして、利用者が飲み物の価格や購入方法に合意するのが、スマートコントラクトの合意です。
最後に、利用者がお金入れて、ボタンを押すことで飲み物を得ることが、スマートコントラクトの実行となります。
コンセンサスアルゴリズム
ブロックチェーン技術の中心に位置するのが「コンセンサスアルゴリズム」であり、これはネットワーク全体で一致する意見を形成するための重要なメカニズムです。
このアルゴリズムは、取引の正当性を確認し、新たなブロックを追加する役割を果たし、その結果としてブロックチェーンの分散性と信頼性が保たれます。
コンセンサスアルゴリズムにはさまざまな種類が存在し、それぞれが異なる特性と利点を持っています。
「プルーフ・オブ・ワーク(PoW)」と「プルーフ・オブ・ステーク(PoS)」はその中でも特に知名度が高く、これらのアルゴリズムを今回紹介したいと思います。
プルーフ・オブ・ワーク(PoW)
「プルーフ・オブ・ワーク(PoW)」は、ビットコインなどの多くの仮想通貨で採用されているアルゴリズムであり、新たなブロックを追加するための方法として使用されます。 「マイニング」と呼ばれる手法を用いて複雑な計算問題(冒頭に説明した、nonceを導出する問題)を解くことが求められ、その結果としてブロックチェーンの安全性が確保されます。
参加者のコンピューターの計算力を担保に、安全性を確保している合意形成アルゴリズムになってます。
プルーフ・オブ・ステーク(PoS)
一方、「プルーフ・オブ・ステーク(PoS)」は、イーサリアムで採用されているアルゴリズムであり、新たなブロックを追加する権利を、ユーザーが保有する通貨の量やその保有期間に基づいてランダムに割り当てるという特性を持つアルゴリズムです。
このアルゴリズムの最大の利点は、大量の計算リソースを必要とせずにブロックチェーンのセキュリティを維持できるという点です。
参加者の資産力を担保に、安全性を確保している合意形成アルゴリズムになってます。
最後に
以上が、ブロックチェーンの基本的な概念と重要な技術についての説明です。
次回は、これらのブロックチェーンの基本的な概念を活用したサービス
「Amazon Managed Blockchain」について詳しく説明します。
本ブログがどなかたのお役に立てれば幸いです。