ブロックチェーン - ブルーム・フィルタ

ブルーム・フィルタの役割はプライバシー保護

ビットコインは不特定多数の参加者によって利用されているネットワークなので、参加者のプライバシー保護のため、個人を特定されないように工夫されています。

ブルーム・フィルタを使えば、ビットコイン・アドレスがネットワーク上に送信されないため、個人のウォレット・アドレスにも結びつかず、ビットコインを盗み取ろうとする人にアドレスが漏えいしません。

ただし検索パターンで取引の検証を行うため、確率的な検証しかできませんし、問い合わせたフルノードのブロックチェーンか改ざんされているかもしれません。

こうした問題に対応するため、ランダムに選択した複数のフル・ノードに問い合わせて集めたマークル・パスを比較することで、目的のトランザクションが特定のブロックに記録されていることを検証できます。

正確性とプライバシー保護のレベル

ブルーム・フィルタと同じハッシュ関数を使えば、特定の入力に対して同じハッシュ値が出力されますので、どのノードで計算しても同じ結果がえられます。

正確性とプライバシー保護のレベルは、ブルーム・フィルタの長さとハッシュ関数の個数を調整することで変えられます。

正確性が高まりすぎると特定のビットコイン・アドレスがウォレット内にあることが知られてしまい、プライバシー保護を高めると多数のビットコイン・アドレスがにマッチしてしまい特定できなくなります。

また、特定の検証は相手のビットコイン・アドレスを知っている前提で行われます。

このアドレスを知らないと、理論上送金が確定できず取引できません。

そのため第三者の取引について調べようとすると、フル・ノードを構築してブロックに含まれるトランザクションを読み解く必要があります。

ブロック生成時の指標 - ハッシュパワーとハッシュレート

ハッシュパワーとハッシュレート

マイニングには、ハッシュパワーとハッシュレートという指標があります。

  • ハッシュパワー
    1ブロックの生成に要した時間。
  • ハッシュレート
    1秒間にハッシュ関数で算出されたハッシュ値の数。

ビットコインのハッシュパワーは理論上、1ブロックの生成に10分かかるとしたら1時間で6ブロック生成されることになります。

しかし、実際は1時間ちょうどではなくかなり時間が前後します。

ブロック生成性能の比較

ビットコイン以外の仮想通貨や仮想通貨以外の用途で使われるブロックチェーンでも、ブロック生成の指標としてハッシュパワーとハッシュレートが利用できます。

マイニング・マシーンのブロック生成性能を比較する時によく利用されます。

ただし、これらの指標は異なる仮想通貨やブロック生成アルゴリズム間の比較に利用することはできません。

ブロックチェーン - アニメーションでメカニズムを可視化

ブロックが生成されてブロックチェーンになることを理屈では分かっていても、なかなかイメージしにくいかもしれません。

そのような時はブロックチェーンを可視化するサイトが便利です。

ビットコインのマイニング・トランザクション、ブロックなどの情報を確認できるサイトがあります。

基本的にブロックチェーンを参照したり、マイニング中のブロックの中身をアニメーションにして表示したりしているだけです。

誰でもブロックチェーンの中身を参照することができるのも分散管理台帳の特徴です。

ウェブ・アプリケーション開発のスキルがあればこうしたサイトを自作することも可能です。

ブロックがつながる様子が分かるchainFlyer

ビットコインの多数のトランザクションがブロックとしてマイニングされる様子をアニメーションで確認できるのがchainFlyerです。

chainFlyer

ブロックが生成されてブロックチェーンに追加される様子をイメージ画像でみることができます。

実際のトランザクションがどれくらい生成されているのかをイメージしやすいかと思います。

見ていて面白いBITBonkers!

BITBonkers!でもトランザクションを可視化できます。

BITBonkers!

キューブがブロックでボールがトランザクションになり、サイズが送金額になります。

参加ノードをリアルタイムに把握できるBitnodes

Bitnodesはビットコイン・ネットワークに参加しているノードをリアルタイムに確認できます。

Bitnodes

IPアドレス、国名や都市名を見ることができます。

米国や欧州が特に活発にビットコインを利用していることが見て取れます。

ブロックの中を詳しく調べられるBLOCHCHAIN

特定のブロック番号の詳しい情報を調べたいのであればBLOCHCHAINが便利です。

サイトにアクセスして、右上にあるサーチにブロック番号を入力して検索することができます。

BLOCHCHAIN

概要とハッシュ項目の情報がブロック・ヘッダに相当し、下にあるトランザクション番号が個々の取引履歴に相当します。

ブロック・ヘッダ(概要とハッシュの項目)には前後のブロックのハッシュ値、ブロック高、中継所、難易度、ノンス、バージョンなどのたくさんの情報が見れます。

ブロックチェーンのバージョンアップ

ソフトフォーク(Soft Fork)

ブロックチェーンにブロックを追加するルールを変更したり、厳しくしたりすることによって一時的な分岐が発生することがあります。

これをソフトフォーク(Soft Fork)と呼び、古いルールと新しいルールが混在してマイニングされてしまいます。

新旧のルールはブロックやトランザクションに含まれるバージョン情報で決まります。

新ルールへバージョンアップされていない取引アプリやマイニング・ツールを使ったノードがネットワーク上に残ると、旧ルールのまま取引やマイニングをしようとしてしまい問題が発生します。

過半数のマイナー・ノードが新ルールでマイニングを行うようになると、ブロックチェーンは新ルールで生成されたブロックが追加されていくので、分岐後に旧ルールで伸びたブロックは無効にされてしまいます。

ハードフォーク(Hard Fork)

ブロックチェーンは不正な手段で変更することが難しいですが、訂正を行う際にはハードフォーク(Hard Fork:コア・プログラムの分裂)が発生し手間がかかります。

絶対に間違いのないデータや取引を常に行えるとよいのですが、間違う可能性もあります。

アルトコインの中にはブロックチェーンに特定の権限の与えられたユーザだけが、厳格な規定に基づいてブロックチェーンに変更を与える訂正機能が追加されています。

この機能によってデータの修正、コスト管理、ガバナンスの順守が可能になります。

ブロックチェーンはすでに備わっている機能を利用するだけでなく、設計することによってさまざまな機能を追加できます。

ブロックチェーン - 分散ネットワークのプロトコル

PoWアルゴリズム

Proof of Work(Pow)アルゴリズムは、誰が参加しているか分からない分散ネットワークにおいて、取引の合意形成を可能にするアルゴリズムです。

ビットコインではProof of Workプロトコルが使われています。

Proof of Workプロトコルには、ブロック生成時の難易度設定、ノンス値のフィールドがあります。

このプロトコルには、DoS攻撃やネットワーク上のスパムなどの他のサービスの濫用を抑える手段として次の2つがあります。

①チャレンジ・レスポンス・プロトコル

チャレンジ・レスポンス・プロトコルは、リクエスタ(クライアント)とプロバイダ(サーバ)の間で直接対話型のリンクを担っています。

②ソリューション検証プロトコル

ソリューション検証プロトコルは、リクエスタがソリューションを求める前に問題を自ら課さなければならず、プロバイダは問題の選択と見つかったソリューションの両方を確認しなければなりません。

ブロックチェーンで使われる暗号技術 - ハッシュ値

任意長の文字列から一意に決まる固定長の値

ビットコインにおいてブロックチェーンが事実上、改ざんできないことを保証するときに中心的な役割を果たしているのが1方向性ハッシュ関数です。

ハッシュ関数は任意長の入力メッセージに対して固定長のハッシュ値を出力する決定的関数であり、入力が異なればハッシュ値も異なります。

大きな2つのファイルが同一であるかどうかを判定する際に、全てのデータを比較することは非効率的であるため、それぞれのハッシュ値を比較して効率化を図るといった用途に用いられます。

満たすべき3つの性質

1方向性ハッシュ関数は、ブロック作成時に近道がないことを保証します。

つまり与えられたハッシュ値を持つような入力メッセージを求めることは計算量的に困難であるという性質を持つのです。

暗号で利用されるハッシュ関数は、1方向性を含め、次の3つの性質を満たしていなければなりません。

  • 衝突困難性
  • 原像困難性(1方向性)
  • 第2原像困難性

ハッシュ関数SHA-256

ビットコインで利用しているハッシュ関数はSHA-256と呼ばれるもので、その仕様は米国の連保情報処理標準FIPS180-4に定められています。

ハッシュ値計算の流れ

ハッシュ関数は、任意長の入力メッセージに対して、固定長のハッシュ値を出力します。

また、ハッシュ関数は入力が少しでも異なると出力が全く異なるように設計されています。

つまりメッセージの局所的な違いが全体に伝搬されていくような構成となっています。

ブロックチェーンで使われる暗号技術 - 電子署名

電子署名

電子署名の目的は、データの正しさを保証することです。

公開鍵型電子署名の場合、秘密鍵を文書に署名する鍵として、公開鍵を電子署名を検証する鍵として使います。

秘密鍵を使って署名

ビットコインの場合、所有するビットコインを次の所有者に対して送るというトランザクションが確かにそのビットコインの所有者、つまり署名鍵(秘密鍵)の所有者が意図するものであることを保証します。

電子署名は、署名鍵を知っている人にしか作ることのできないデータを、署名するデータに対して作ることによって、署名されたデータは署名鍵を知っている人が意図したものであり、かつ改変されていないことを保証できるようになります。

公開鍵を使って検証

電子署名の検証は署名鍵に対応する検証鍵(公開鍵)によって行うことができます。

検証鍵は公開してよいものであるため、誰でも電子署名の正しさを検証できます。

仮想通貨の新規台帳を作るための難易度

仮想通貨は採掘競争環境が激化してもコンピュータの性能向上があっても、一定の速度でマイニングされるよう、または早くマイニングされすぎないように調整する機能を備えています。

それは採掘難易度(Difficulty)と呼ばれます。

中央管理者がいなくても仮想通貨の供給量が調整できる仕組みでインフレ抑制としての効果もあります。

難易度調整のメカニズム

ビットコインでは、難易度が変わると新規ビットコインの発行と取引承認に影響します。

もしブロック生成が遅れるとマイナーにとってはマイニング報酬が少なくなり、仮想通貨を使って取引しようとする人にとっては送金に遅れが生じます。

反対にブロック生成が早すぎるとマイナーの報酬は高くなり、利用者にとっては悪意を持ったマイナーが生成したブロックが承認されてしまう可能性が高まります。

そうすると正常な送金が行えなくなったり、仮想通貨の信頼性が失われて価値を失うことさえあり得ます。

このような理由から、一般的にビットコイン以外の仮想通貨でもマイニングの難易度を調整しています。

ブロックチェーンのIoT的な使いどころ

IoT的な使いどころ

ブロックチェーンはビットコインとともに世の中に登場したため、仮想通貨を実現するための仕組みだと思われがちですが、そうではありません。

アプリケーションの部分を取り替えれば、さまざまなサービスを実現でき、世の中にはすでにブロックチェーンを基盤とした仮想通貨以外のサービスも存在しています。

ブロックチェーンを基盤とした仮想通貨以外のサービスとしては次のようのものが挙げられます。

  • データの売買(スマート・コントラクト)
  • センサー・データの保存
  • マイコンログの保存
  • 制御コマンドやその応答の保存
  • カメラ画像の保存
  • 農作物や制作物のトレース

ビットコインの基礎知識(7) - ノード同士の通知と検証

ビットコインのノードは目的別に3種類あります。

1. SPV(Simplified Payment Verification)ノード

SPVノードは、ビットコイン利用者のインターフェースとなるノードです。

スマホやPCにウォレット・アプリを入れることでこのノードになります。

利用者の入力した取引データの正当性検証を行い、これをビットコインネットワークに送信します。

2. マイニング・ノード

マイニング・ノードはその名の通りマイニング報酬を得ることを目的としたノードです。

新規ブロックを効率よく生成するため、GPUやASICといった超高速並列計算が可能なハードウェア上で実行します。

3. フル・ノード

フル・ノードはビットコイン・ネットワークの維持運営で中心的な役割を持つノードです。

原始以来の全てのブロックチェーンを保存しています。

このノードの目的は、全ての取引データの正当性検証と二重払いデータの検証を行うことです。

ノード同士の通知と検証

利用者がウォレット(SPVノード)を使ってビットコインを誰かに送金すると、ビットコイン・ネットワークに取引データがブロードキャストされ、フルノードやマイニング・ノードがこれを受信し、正当性検証を実施します。

PoWが始まりブロックを書き込む権利を得たマイニング・ノードは、自身が生成したブロックをブロードキャストでネットワークに通知し、全ノードがこれを受信します。

ブロックを受信した各ノードは、正当性検証を実施後に自身の台帳にブロックを追記し、chainstate(取引データから生成されたデータベース)内のUTXOを更新します。