ブロックチェーンの取引情報の管理とチェーンの維持
はじめに
前回は、ビットコインの構造やコンセンサスアルゴリズムについて説明しました。今回はブロックチェーンの取引がどのように行われ、情報として管理されているかを解説します。後半ではブロックの分岐や不正ブロックをどのように防いでいるのかについても理解しましょう。
ブロックチェーンの取引
ブロックチェーンの取引情報がどのように作られるのかをビットコインを例に説明しましょう。第1回で公開鍵暗号方式を使ったデジタル署名について解説しましたが、ビットコインはこのデジタル署名により取引情報の本人確認を行っています。
図1を使って説明しましょう。ビットコインで取引するには「秘密鍵」と「公開鍵」と「ビットコインアドレス」が必要になり、この3つの情報が入っているものをWallet(財布の意味)と呼びます。
ビットコインアドレスの作成
ビットコインを利用するときは、まず、利用者のIDとなるビットコインアドレスを取得する必要があります。
①秘密鍵の生成
最初に秘密鍵を生成します。鍵と言っても無作為に選ばれる数値の羅列で、ビットコインの秘密鍵はランダム生成器を使った256ビットのランダム値です。
②公開鍵の生成
次に秘密鍵を使って公開鍵を生成します。ここでは暗号技術として非常に高度な楕円曲線暗号方式というアルゴリズムが使われています。
③ハッシュ値の取得
そして公開鍵を使ってビットコインアドレスを作成します。第1回でブロック情報のハッシュにSHA-256を使っていると説明しました。実は一般に衝突攻撃の対策としてSHA-256を二重にかけるという手法もよく使われており、ここではSHA-256でハッシュ化した値を、さらにRPIMD-160というハッシュ関数でハッシュ化しています(HASH160と呼ばれています)。
④ビットコインアドレスの作成
最後にハッシュ値をBase58を使用してエンコードします。エンコード(encode)とはデータを一定の規則に基づいて変換(コード化)する言葉です。ここでは人間にわかりやすい58種類の英数字にする処理を行っています。似たようなエンコード方式にBase64がありますが、Base58はBase64のうち「+, -, 0, O, |, l」という人間が間違いやすい6文字を除外しています。
ビットコインでの取引
ビットコインの取引がどのようにデータ処理されるのか、図2を使って説明します。
①取引情報
ビットコインの取引は「いつ、誰が、誰に、いくら渡したか」という情報であり、データ的にはビットコインアドレス、input、output、金額というような内容が含まれます。
②デジタル署名
取引情報には、送信者の秘密鍵を使って暗号化したデジタル署名がなされています。暗号化されたデジタル署名は、秘密鍵とペアになる公開鍵があれば復号できるのでしたね。
③ブロードキャスト
取引が発生すると取引情報がP2Pネットワークにブロードキャストされます。中央管理者のコンピュータ1箇所ではなく、各ノードに情報が一斉送信されるのがブロックチェーンの面白いところです。
④検証
各ノードは送られてきた取引情報について、公開鍵を使ってデジタル署名を復号して検証します。そして「確かに真正なビットコインアドレスが署名した取引情報だ」と証明されたら取引成立となります。実際には取引情報をブロックに積んで、当たりナンスを見つけるために約10分間マイニングを行います。そして当たりが出たら各ノードが当たりナンスと二重使用などをチェックし、ノードの過半数が合格と認めて初めて送金処理が行われます。
マークルルート
前回、ブロックのヘッダに今回の取引のハッシュ値(Markle Root:マークルツリーのルートハッシュ)を含めると説明しました。このマークルツリーについて見て行きましょう。
マークルツリーは、図3のような二分木のツリー構造でハッシュ木とも呼ばれており、2つの値を加算する処理を繰り返して最終的に1つの値を作成する処理です。まず2つの取引情報のハッシュ値を繋げてそれをハッシュ化します。さらに次のレベル同士を2つ繋げてハッシュ化する。この処理を繰り返してルートハッシュ(マークルルート)を作成するわけです。なお、数が奇数の場合は、半端なデータは自分と自分を足してハッシュ化します。
このマークルルートをブロックヘッダへ格納することで、ブロックに含まれている取引情報の改ざんを簡単に確認できます。もし、1つでも取引情報が書き換えられていれば、マークルルートの値が変わってしまうからです。
こんな面倒なことをしなくても、取引情報全体にハッシュをかけた値をヘッダに格納すれば良いじゃないかと思いますよね。たしかに、それでも取引情報が書き換えられればハッシュ値が変わるので改ざんを検知できます。ただ、その方法だと改ざんを検知した後にどの取引情報が書き換えられたかを調べるためにはすべての取引情報をチェックする必要があります。マークルツリーを使えば、ルートから右が不正か左が不正かを逆にたどることで簡単にどの取引情報が改ざんされたり、抜かれたりしたかを探知できるメリットがあります。
残高管理(UTXO)
ブロックには取引情報は格納されますが、残高情報はありません。そのため、ある人のコイン残高を求めるには、ブロックのチェーンを追ってその人に関する取引を計算することになります。残高管理方法にはUTXOとアカウント方式などがありますが、ここではビットコインが採用しているUTXOを説明します。
UTXOは「Unspent Transaction Output」の略で、未使用トランザクションアウトプットと訳されています。トランザクション(取引)のデータは「誰から」「誰へ」「いくら渡したか」であり、仮想通貨の場合はInputとOutputで表されます。
UTXOが面白いのは、電子データ処理なのに実コインと同じ「お釣り」の考え方が用いられている点です。例えば6.25B持っているA社がBさんに5B渡したとしましょう。普通に考えれば、次のようなトランザクションを記録することで残高計算できます。
A社のトランザクション:−5
Bさんのトランザクション:+5
しかし、UTXOは6.25Bのコインを使用して、自分はお釣りとして1.25Bのコインをもらい、結果的に相手は5Bのコインを受け取ったと記録します。
A社のUTAOを使用(spent):-6.25
A社のUTAOを追加(input):+1.25
BさんのUTAOを追加(input):+5
ちょっとわかりにくいので、図4を使って説明しましょう。BさんはA社からtx1で5Bもらっています。このときのトランザクションは上の3つです。次にBさんはD店にtx5で0.35B支払っていますが、これも同じ処理で次の3つのトランザクションが発生しています。
BさんのUTAOを使用(spent):-5
BさんのUTAOを追加(input):+4.65
D店のUTAOを追加(input):+0.35
実はBさんの残高はこれだけでなく、別の日にC店から0.2Bを2つ受け取っているので、それを合わせて5.05Bとなります。UTXOの特徴は「Input取引=コイン(UTXO)」という考え方が基本となるので、たまたまC店の手持ちUTXO(コイン)が0.2B2つだった場合、Bさんに0.4B送付するのに合算して渡すことができないところです。
ここまで説明すれば、UTXOのUnspent Transaction Outputという言葉が、相手に渡していない(Unspent)、渡す(output)ことが可能な取引(Transaction)をコインに見立てていることが理解できると思います。そして、Bさんのアドレスが付いている未使用のURXOを集計すると、それがBさんの残高になるわけです。なお、最初に発掘報酬で得たUTXOはcoinbaseトランザクションと呼ばれる特殊なもので、無からコインが誕生した形になります。
なお、我々はお金を小さな単位にすることをお金をくずすと言いますが、ビットコインの場合はトランザクションの分割です。コインはどこまで分割できるのかというと0.00000001BTCまで、これを発案者の名前にちなんで1satoshiと呼ぶこともあります。
ビットコインエクスプローラ
ビットコインのエクスプローラーページを見ると、ビットコインの価格変動状況やブロックチェーンの作成様子がリアルタイムで表示されています。図5は2023年6月時点のビットコイン価格で、1BTCが26,489.94ドルで取引されているのがわかります。上のグラフは価格の推移で時間軸をMAXで見たものです。2020年くらいまで10Kドルくらいだった価格が翌年70Kドルくらいまで高騰し、いったん下がってまた少し上昇しつつあるのがわかりますね。
その下がブロックチェーンの状況で、左端の#793513が現在発掘中、#793512が最新のブロックです。下のデータを見ると、Consensus:Proof of Work、Algorithm:SHA-256、Genesis Block Data:2009-01-03と表示されており、コンセンサスアルゴリズムにPoW、ハッシュ関数にSHA-256、そして最初のブロックの発掘が2009年1月3日だということがわかります。
1BTCの価格は1ドル140円で計算するとだいたい370万円くらいですね。日常のお金として使う場合は、小数点以下の0がたくさん並ぶことになりちょっと不便です。satoshiさんも、こんなに高価になるとは思わないでBTCの単位を決めたのでしょうが、デノミネーションしたくてもできないところがP2Pの悩ましいところです。
なお、現在の発掘報酬が6.25BTCなので、1ブロック発掘することで2313万円相当の報酬+手数料を稼げます。また、1satoshiは0.37円になるので、こちらは十分な細かさと言えます。
ちなみにブロック数793513を1ブロック10分で計算すると7,935,130分となり、これは約132,252時間、5,511日、15.1年となり、2009年1月から2023年6月までが約14年5か月になるのでつじつまが合います。こんなに長い年月、1ブロック10分という速度をキープして掘り続けてる仕組みができているのはちょっと驚異的ですね。
satoshiさんの描いた夢は、人々がビットコインを日常的に使う世界だったかも知れません。たしかに、国家という概念がない通貨なので、海外の人との取引に使えますし、◯◯Payのようにお金の代わりに普段遣いできたらどんなに便利でしょう。
しかし、現在のところ、前回述べたように金融資産として投資対象とされていることが多いと思います(まあ、それはそれで第2の金を生み出したのだからすごいことですが)。図5のエクスプローラーにビットコインの価格変動が掲載されていますが、これは株や通貨と同じく取引所で売り買いされている相場です。そして株や通貨と同じように取引の際には取引手数料がかかります。手数料には購入手数料と売却手数料と送金手数料がありますが、現在は購入手数料と売却手数料を無料にして、1回の送金当たり2000円〜5000円くらいの送金手数料だけ取っているところが多いようです(送金手数料も無料なところもあります)。
ブロックのチェーン
ビットコインは、図5に表示されているブロックチェーンに過去取引がすべて記録されています。チェーンが1つであることは非常に重要です。しかし、集中型であれば中央管理者のデータベースに一元管理するだけですが、分散型ネットワークですべてのノードが同じブロック情報を共有するのはなかなか難しい課題です。このあたりの仕組みについて説明しましょう。
ブロックチェーンの共有
ブロックチェーンの情報は、最初のブロック(Genesis Block)から最新ブロックまで参加者全員が共有・保持しています。前回説明したように、大多数のマイナーはヘッダ情報と取引情報をすべて保持し、コインの二重使用チェックなどに役立てており、彼らはフルノードと呼ばれています。一方で、ヘッダ情報は保持して検証には協力するけれど、古い取引情報は取り除いて参加するノード(軽量クライアント)の参加も認めています。
ブロックチェーンの分岐
PoWのルールでは、最初にナンスを発見したマイナーが名乗り出て、他のマイナーたちがそれを正当と検証したらそのブロックがチェーンにつながります。ただし、ブロックチェーンはP2Pなので完全な整合性が取れず、チェーンが分岐する場合があります。
図6を使って説明しましょう。ブロック#900001がチェーンに接続された後、次のブロックでマイナーAとマイナーBが同時に「当たりナンス発見」と伝えたとしましょう。2つ同時発見とは知らずに、あるマイナーたちはマイナーAの正当性を認めてそのブロックをチェーンにつなげ、別のマイナーたちはマイナーBの正当性を認めてそのブロックにつなげることが起こりえます(図の分岐)。
この場合、どちらのマイナーグループも正しい操作を行っているのですが、大岡越前のような権威者がいないP2Pネットワークなので、どちらが正当だと大岡裁きを下してくれる人がいません。P2Pのこの課題に対して、ビットコインのPoWはどのように解決しているのでしょうか。
長いチェーンが正当というルール
PoWでは「長いチェーンを正当とする」というルールがあります。平たく言えば、長くした方が勝ちということです。分岐がわかった後も、グループAとグループBがそれぞれ自分たちのチェーンを伸ばそうとして発掘を続けたとしましょう。PoWでは一時的な分岐は許容されているのです。
もし、グループBの方が参加者が多く、チェーンをどんどん伸ばしていったとしたら、グループAの人たちはこのままでは勝ち目がないと判断します。正当でないとされたチェーンはブロックが破棄され、取引情報も未記録に戻されます。そしてマイニング報酬が取り消されてしまうのです。つまり、ブロックを発掘したとしても、それを負け組チェーンにつないだら徒労に終わる可能性が高いのです。そこでグループAのマイナーは、自分たちの発掘したブロックをグループBのチェーンにつなげる方針に宗旨変えするわけです。
「長いチェーンが正当」というルールは、PoWの基本である「たくさん作業した者をみんなで認める」という考え方です。最長のチェーンは最も多くの作業を費やしたことの証であり、多くのマイナーがそのチェーンに合意していると考えられます。
なお、図6ではブロックのチェーンが分岐していますが、これは説明のためです。グループAもグループBも、認識しているのは自分たちのチェーンだけが一本真っ直ぐにつながっている状態です。図5のエクスプローラーにしても、このブロック情報が必ず正しいとは限らず、分岐した側が長くなればそちらに切り替えて表示されます(勝てば官軍ということです)。
まとめ
第3回の今回は、以下の内容について学習しました。
- ビットコインで取引するには「秘密鍵」「公開鍵」「ビットコインアドレス」が必要になり、この入れ物をWalletと呼ぶ
- ビットコインドレスはユーザーIDであり、これは公開鍵暗号方式や二重ハッシュ、Base58によるエンコードなどを使って作成する
- ビットコインの取引は秘密鍵を使ってデジタル署名され、P2Pネットワークが公開鍵を使って検証を行う
- ビットコインの取引情報は、マークルツリーでルートハッシュ化されてヘッダに格納される
- ビットコインには残高情報がない。コイン残高はUTXOという取引情報のトランザクションから計算で求められる
- ビットコインエクスプローラーを見ると、価格相場やブロック作成状況が確認できる
- ブロックチェーンは一時的な分岐が発生しうるが、長いブロックを正とするルールにより自然と一本に戻る
- 大岡越前のいないP2Pなので、新ブロック誕生時および正当なブロックチェーンを選ぶ際に、多数決的な解決法が取られている
次回は、ビザンチン将軍問題を理解した上で、なぜPoWでは当たりナンスの発見という無意味なゲームをやらせているか、改ざん防止の本質についてもう1段深堀りして説明します。お楽しみに!
¥連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- ブロックチェーン(2)ブロックチェーンの構造と仕組み(マイニング・PoW)
- イーサリアムで見る「PoS」と「PoI」の仕組み
- PoWにおける多数決方式とハードフォーク
- Web3の概要とブロックチェーン(1)
- Lightning Networkが動作する仕組み
- Lightning Networkの送金処理で使用されている技術【前編】
- ベルリンのスタートアップに聞いてみた!BrickBlock―ブロックチェーン技術の開発に関わる面白さと彼らの見る未来とは?
- IoT×ブロックチェーンで業界常識を破壊する- ハッカソン最優秀賞「Cargochainプロジェクト」とは
- エンタープライズグレードのブロックチェーンを発展させる「Hyperledger」とは
- 「DApps」と「メタバース」