オーファンブロック、ビザンチン将軍問題、51%攻撃、マークルツリーなど、ちょっと難解なブロックチェーン用語を出来るだけわかりやすく解説しています。
ブロックチェーンのメカニズム
ブロックチェーンを構成する各種要素、基本的なメカニズムを解説します。
ジェネシスブロック
ブロックチェーンにおける最初のブロック。ジェネシスブロックの前にはブロックがないため直前のブロックのハッシュ値を持っていません。
2009年1月3日に生成されたビットコインのジェネシスブロックにはハッシュ値の代わりに「The Times 03/Jan/2009 Chancellor on brink of second bailout for bank」という文字列が書き込まれています。これは英タイムズ誌の2009年1月3日号の見出しの引用で「銀行救済に二度目の公的資金注入へ」という意味です。
オーファンブロック(孤立ブロック)
異なるマイナーが同時にブロックを生成した場合、一方はメインチェーンに繋がれずオーファンブロックとなります。そのほか、マイナーがブロックを受け取った場合に親となる直前のブロックを探しますが、親が見つからなかった場合にオーファンブロックとして扱います。
ブロックヘッダー
ブロックチェーンの各ブロックには、そのブロックの情報を要約したブロックヘッダーと呼ばれる領域があります。ビットコインにおけるブロックヘッダーには、以下の情報が格納されています。
- 1つ前のブロックのハッシュ値
- (Proof of Workを証明する)ナンス
- (現在のブロックにおける取引記録全体を表す)マークルルート値
現在のブロックに含まれるすべての取引データのハッシュ値を、マークルツリーを利用して1つのハッシュ値(マークルルート値)にまとめあげています。具体的には、2つの取引データのハッシュ値のペアを足してハッシュ化し、これを繰り返していくことで、最終的に1つのハッシュ値としています。
このマークルルート値をブロックヘッダーに格納することで、ブロックに含まれる全取引データが改ざんされていないことを保証できます。(1つでも取引データが書き換えられれば、マークルルートの値も変わるため。)
Block Height:ブロック高
ブロックチェーンのブロックは、時系列で前後のブロックとつながりを持っています。よって、ブロックチェーンは最初から最新時点までブロックがひとつながりにつながったものと言えます。これを縦に積み上げていると考え、ブロックに番号をつけ、その高さを表す単位をBlock Height(ブロック高)といいます。
ハッシュ関数
任意の長さのデータ(ビット列)を、一定の長さのデータ(ビット列)に変換する関数。ハッシュ関数には以下の特性があります。
- 元のデータが同じであれば必ず同じ値を返す。
- 元のデータが1ビットでも異なれば、まったく異なる値を返す。
- 大きなデータからコンパクトでユニークな要約値を得られる。
- 変換後の値から元の値を求めることはできない。
これらの特性から、ハッシュ関数は検索やデータ比較の高速化、改ざんの検出、暗号化、電子署名などに使われています。
名称 | ハッシュ値の長さ (単位:ビット) | 備考 |
---|---|---|
SHA-1 | 160 | 電子署名の用途で使うことは推奨されません。 |
RIPEMD-160 | 160 | 電子署名の用途で使うことは推奨されません。 |
SHA-224 | 224 | |
SHA-256 | 256 | 電子署名法の施行規則で推奨されています。 |
SHA-384 | 384 | 電子署名法の施行規則で推奨されています。 |
SHA-512 | 512 | 電子署名法の施行規則で推奨されています。 |
SHA-512/224 | 224 | |
SHA-512/256 | 256 |
ハッシュ値
任意のデータ(ビット列)を、ハッシュ関数で変換した後の固定長のデータ(ビット列)をハッシュ値と呼びます。メッセージダイジェスト、フィンガープリントなどとも呼ばれています。一方、変換前の元のデータはメッセージと呼ばれます。
Hashcash:ハッシュキャッシュ
スパムメールやサービス拒否攻撃を回避するために使用されるPoWの一種。Adam Back(アダム・バック)により1997年に実装が公開され、その後2002年に論文として発表されました。ビットコインのPoWにはハッシュキャッシュが採用されています。
Merkle Tree:マークルツリー
大きなデータを要約した結果を格納するツリー構造の一種。ハッシュ関数が利用されていることから、ハッシュ木とも呼ばれます。
AとBという2つのデータがある場合、まずは、Aのハッシュ値、Bのハッシュ値をそれぞれ計算し、このAのハッシュ値、Bのハッシュ値それぞれを足し合わせた値のハッシュ値をとったものが頂点の値となります。
これを複数段のツリー構造で繰り返し、2段、3段と2個づつハッシュをまとめていきます。そして、最終的に得られた頂点のハッシュ値はマークルルートと呼ばれます。
マークルツリーはハッシュ関数を使用しているため、どんなに大きなデータ、どんなに多くのデータを入力しても最終的に得られる値(マークルルート)は一定のデータ長となります。
Merkle proofs:マークル証明
マークルプルーフは、次の要素を決定するために使用されます。
- データがマークルツリーに属している。
- データセット全体を保存せずに、データセットの一部であるデータの有効性を簡潔に証明する。
- 完全なデータセットまたはそのサブセットのいずれかを明らかにすることなく、より大きなデータセットに含まれる特定のデータセットの有効性を保証する。
フォーク
ブロックチェーンが2つに分かれた状態。2人のマイナーがほぼ同時にブロックを見つけたときなどマイニングプロセスの一部として定期的に発生し、その結果ネットワークは一時的にフォークします。
その後に後続のブロックが追加されより長いチェーンとなった方のブロックが有効となり、もう一方のブロックはネットワークにより孤立(破棄)されることでフォークは解消します。
ハードフォーク
従来のノード(ソフトウェア)で有効とみなされない(互換性がない)新しいブロックを作れるようになるルールの変更。
ソフトフォーク
従来のノード(ソフトウェア)で有効とみなされる(互換性がある)新しいブロックを作れるようになるルールの変更。
transaction malleability:トランザクション展性
別名マリアビリティ問題と呼ばれるBitcoinの脆弱性問題。
Bitcoinの仕様上scriptSigは書き換え可能となっていました。scriptSigが変わると、ハッシュ化された際のトランザクションIDも変わるため、結果として同じ取引データなのにトランザクションIDだけ異なるブロックを生成できてしまいます。
これにより、悪意のある攻撃者が繰り返し送金を求めることが可能となり、二重取引が行われるという課題がありました。
Segwitを実装すると、このscriptSigが取引データの中から削除されてWitnessに移行し書き換えができなくなります。そのため、トランザクション展性が起こらなくなると考えられています。
フルノード
すべてのブロック(すべてのトランザクション)をダウンロードして検証するノード。有効なもののみを他のノードに伝達します。
ライトクライアント
フルノードのワークロードを軽減したもの。フルノードを経由してブロックチェーンにアクセスし、各ブロックのブロックヘッダーのみをダウンロードします。
ブロックヘッダーを使用して、自身と関係のあるトランザクションだけを検証し、トランザクション情報などは、都度フルノードから取得します。フルノードと比較して、CPUとストレージの負荷は大幅に軽量化されます。
Simplified Payment Verification(SPV):簡易支払検証
サトシ・ナカモトが考案したBitcoinにおけるライトクライアントの仕組み。
Validator:バリデータ
ブロックチェーンに記録されるデータの内容が正しいかどうかを検証するノードのこと。
トランザクション モデル
トークンの所有権を証明するために使用される処理形態。
UTXO モデル
UTXO モデルでは、各トークン所有者は、前のトランザクションのハッシュと次の所有者の公開鍵 (アドレス) にデジタル署名し、これらをコインの末尾に追加することによって、所有するコインを別の所有者に譲渡します。
トークンの所有者が実際にトークンを直接所有するのではなく、特定の数のトークンへの出力を所有し、新しい所有者への入力としてサインオーバーできます。
ビットコインブロックチェーンは、UTXO モデルを採用しています。
アカウントベースモデル
従来の銀行同様、口座ベースで残高管理を行うモデル。各アカウント単位で、直接的な価値と情報を転送し、状態遷移を記録していきます。
イーサリアムブロックチェーンでは、アカウントベースモデルを採用しています。
Scaling Solutions:スケーリング・ソリューション
スケーラビリティ(スケーリング)問題
主に、コンセンサスアルゴリズムにPoWを採用しているブロックチェーンにおける、取引量増大時のトランザクション処理遅延および取引手数料高騰の問題。
Segregated Witness(Segwit):セグウィット
ビットコインの抱えていたスケーラビリティ問題を解決するため、トランザクション情報をコンパクトに圧縮する技術。2017年8月に実装されました。
トランザクションの中にあるトランザクションIDは、取引データの中にある「scriptPubKey」および「scriptSig」という署名データをハッシュ化することで求められます。Segwitは、scriptSigを取引データの中ではなく、取引データから隔離された「Witness」という署名領域へ移行させる仕様変更です。
Shard chains:シャードチェーン
並列チェーンを複数本実装し、通常一つのチェーンで一つ一つ順番に処理していたトランザクションを同時並行的に処理することにより、オンチェーンでスケーラビィリティを向上させる仕組み。
Side chain:サイドチェーン
メインチェーンとは異なるブロックチェーンを作り、メインチェーンとサイドチェーン間で互いにペグという方法でネットワーク上の資産を結び付けるもの。メインチェーンのコインをサイドチェーンに転送するには、メインチェーンのコインをロックします。メインチェーンでロックされている間、コインはサイドチェーン内で自由に転送が可能となります。
ビットコインではRSK、Liquid、イーサリアムではxDAIが該当します。
最初にサイドチェーンを提唱したのは、Blockstream(ビットコイン開発メンバー及び暗号技術専門家からなる団体)であるため、狭義ではBlockstreamにより開発されているサイドチェーンのことを指します。
Layer 2(L2):レイヤー2/セカンドレイヤー
レイヤー2上で取引の実行・処理(オフチェーン取引)を行い、メインチェーンに取引後の結果(状態)を記録することで、メインチェーンの処理負荷を減らしつつ、高速な取引が可能となります。
ビットコインではLightning network、イーサリアムではArbitrum、Optimismなどが該当します。
レイヤー2とサイドチェーンの違い
レイヤー2は取引後の状態をメインチェーンに格納するため、メインチェーンのセキュリティを利用しますが、サイドチェーンは、ペグされた資産が往来する別のブロックチェーンと言えます。メインチェーンとは取引承認者が異なるため、サイドチェーンのセキュリティに依存することになります。
Rollup:ロールアップ
L2におけるトランザクション処理の仕組みを指す言葉。以下の流れでトランザクションを処理します。
- ユーザーがL2(=オフチェーン)でトランザクションを実行したのち、トランザクションデータが抽出、圧縮される。
- その後、圧縮された複数のトランザクションデータがまとめてL1へ提出される。
- L1では、提出されたデータをスマートコントラクトで検証し、正当であればL1のブロックに取り込む。
Optimistic rollup(ORU):オプティミスティック・ロールアップ
ロールアップの一種。オプティミスティック(楽観的)という名の通り、L1に提出されるデータは全て正当なものという前提に基づいています。
全てのトランザクションが正当な場合は特に何も起きずに、L1へ提出されたデータはブロックに取り込まれていきます。不正なトランザクションが発見された場合のみ、そのトランザクションに待ったをかけることができます。
- 誰かが不正を発見した場合、発見者は不正の証拠にステーク(掛け金)を添えて提出する。
- 対象のトランザクションはL2ではなくL1で再度実行さる。
- 不正が証明された場合、不正が行われた時点までトランザクションを巻き戻し、代わりに正しいトランザクションを提出する。
- 不正なトランザクションを提出した人には罰金が課され、発見者には報酬が支払われる。
- 反対に、不正ではなかった場合、ペナルティとして発見者の掛け金が没収される。
このように不正を暴くために十分な検証期間を設けなければならず、この期間中は資金をL1に戻せません。多くのORUプロダクトでこの期間は7日に設定されています。
ORUプロジェクトの例
- Optimism
- Arbitrum
Zero Knowledge rollup:ZKロールアップ
ロールアップの一種で、Zero Knowledge(ゼロ知識)証明を用いています。L1へひとまとめにしたデータを提出する際、「L2で実行されたトランザクションは正しい」ということを暗号学的に示す証明結果を一緒に提出します。この証明結果は、L1のスマートコントラクトで即座に検証され、正当であればブロックに取り込まれます。そのためZKロールアップでは、ORUのように不正検証期間を設ける必要がありません。
ZKロールアッププロジェクト一例
- zkSync
- Polygon Hermez
- Loopring
ブロックチェーン間通信
IBC(Inter-Blockchain Communication):ブロックチェーン間通信プロトコル
2つのブロックチェーンの間で任意のデータをやりとりするためのプロトコル。リレイヤーと呼ばれるノードをチェーン間に配置して通信を仲介します。
IBC/TAO
IBCにおいて、2つのブロックチェーン間のパケットを、信頼性、順序性、認証性のある方法で中継するためのレイヤー。 IBC/TAOは、IBCを介して相互に接続された両方のブロックチェーン上で動作するスマートコントラクトとして実装され、そのスマートコントラクトは “IBC/TAOモジュール “と呼ばれます。
IBC/APP
IBCにおいて、IBC/TAOの上に構築されたアプリケーションプロトコルを総称してIBC/APPと呼びます。パケットの符号化および処理のセマンティクスを記述します。
ICS(Inter-chain standard)
ブロックチェーン間通信プロトコル (IBC) の開発と文書化のためのGitHub上のリポジトリ。IBC/TAO、IBC/APPの両方を含む、IBC の設計原理、プロトコルのセマンティクス、およびエンコーディングの記述が含まれます。
GitHub – cosmos/ibc: Interchain Standards (ICS) for the Cosmos network & interchain ecosystem.
LCP(Light Client Proxy)
Datachain(データチェーン)が、2022年7月にリリースしたミドルウェア。ブロックチェーンのインターオペラビリティ(相互運用性)やクロスチェーンブリッジの課題を解決するものとされます。
Relayer:リレイヤー
IBC(ブロックチェーン間通信)において、2つのチェーン間に配置され通信を仲介するノードのこと。
拡張・応用技術
EVM(Ethereum Virtual Machine)
イーサリアムブロックチェーンにおいて、スマートコントラクトを実行するための仮想マシン。Solidity、Vyper、Serpent、LLL、Banboo等、繰り返し処理を含むチューリング完全*なプログラミング言語を実行できます。
Solidity
スマートコントラクトを扱えるオブジェクト指向の高級言語。ブロックチェーンを含む様々なテクノロジーを実装するために開発されました。
ENS(Ethereum Name Service)
仮想通貨の複雑なアドレスを、ユーザーにとって読みやすい文字列に置き換えるサービス。インターネットにおけるDNSに相当するものです。
Oracle:オラクル
ブロックチェーンにおけるオラクルとは、スマートコントラクトに外部(現実世界)の情報を提供するサービスを指します。
通常ブロックチェーンおよびその上で稼働するスマートコントラクトは、外部の情報に直接アクセスすることができません。その一方で、株価や気象情報など外部の情報を取り入れ、その値が一定の条件を満たしたときに所定の処理を自動実行したいという要求が高まりつつありました。
このような要求にこたえる形で、オラクルを提供する企業が登場しました。オラクルによってブロックチェーンの応用範囲が大きく広がったといえます。
DID(Decentralized Identifier)
分散型ID。 特定の企業などIDの管理主体が存在しないため、Web2.0の以下の課題を解決出来るとされています。
- 単一障害点による不正アクセスのリスク
- 特定企業によるプライバシー情報の一元管理
SSI(Self-sovereign Identity)
自己主権型ID。個人情報の扱いを企業に委ねるのではなく、自ら主導権を持ちコントロールするという概念。
セキュリティトークン(ST)
ブロックチェーンなどを用いて移転可能な有価証券類の総称。
ユーティリティトークン(UT)
ブロックチェーンなどを用いて移転可能な、特定の役務提供を受ける際に必要な証憑として機能するデータの総称。
実装
Bitcoin Core:ビットコイン・コア
ビットコインのマイニングや取引をするためのオープンソースプログラム。誰でも、Github でダウンロードして使うことができ、改善案の提案を行うことができます。
Geth
Ethereumの主要なノード運用ソフトウェア(Ethereumクライアント)。イーサリアム財団が開発を支援しています。Ethereumの仕様を実装したEthereumクライアントはいくつか存在しますが、Gethが推奨されています。
GethをインストールすることでEthereumネットワークにフル・ノードとして参加し、以下の動作が可能となります。
- etherの採掘
- etherの送金
- スマート・コントラクトの生成
- トランザクションの生成
- ブロックチェーンの確認
Parity Ethereum:パリティー・イーサリアム
Ethereumの主要なノード運用ソフトウェア。パリティー・テクノロジーズ(Parity Technologies)社により開発されましたが、同社は2019年12月、コストを理由にメンテナンスから手を引いています。
パリティー・イーサリアムはその後、コンセンシス(ConsenSys)からスピンアウトしたGnosisが立ち上げた開発者のDAO、オープンイーサリアム(OpenEthereum)に引き継がれました。
推奨されているEthereumクライアントはGethですが、すべてのノードが同一のクライアントとなってしまうと攻撃への耐性が落ちるため、複数のクライアントソフトウェアが稼働することは重要です。
BAB:バイナンス・アカウント・バウンドトークン
BNBスマートチェーン上で発行される初のSBT。このトークンは、DeSocにおける様々なユースケースを想定していますが、当初はバイナンスでの本人確認(KYC)済ユーザーの認証として機能する予定です。
コメント