見出し画像

ブロックチェーンとは神の不在なり: Bitcoinの仕組み②

こんにちは!
Bitcoin投資はやめてNISAでオルカン派に鞍替えした主婦ねこです.

Bitcoinの面白さを好き勝手に語るシリーズの二回目です.前回の記事はこちら.

※ Satoshi Nakamoto論文(※1)ベースなので,今現在の実装とは異なる点も多々あるかもしれませんがご了承ください.Satoshi Nakamotoのアイデアの素晴らしさが伝われば幸いです.


Bitcoinとは

前回もお話しした通り,Bitcoinとは"みんな"に分散管理されたコイン(暗号資産)の取引記録を記した台帳,またはその台帳で管理されたコインそのものです.取引記録とは下の図のようなもので,AさんのコインがBさんに送られて,それのうちの一部が今度はCさんに送られて..というコインの流れを記したものです.この台帳は全世界に公開されていて,"みんな"で二重支払いなどのおかしな取引が行われていないかを検証しています.

Developer Guides ー Bitcoinより抜粋

取引記録のことをこれからTransactionと呼びます.Transactionの管理で大切なことはTransactionが行われた順番を適切に保存することです.このため,ブロックチェーンでは複数のTransactionをブロックにまとめて,ハッシュチェーンを作っていきます.過去のTransactionを改ざんすると,ハッシュ値が変わってしまい,ハッシュチェーンがつながらなくなってしまうため,Transactionの改ざんにすぐに気が付くことができます.

Developer Guides ー Bitcoinより抜粋

タイムスタンプサーバーとBitcoin

あるデータをハッシュチェーンで管理することで,そのデータが存在した時間や順番を維持し,改ざんを困難にするというアイデアはBitcoinのオリジナルのアイデアではありません.このアイディアは1990年にHaber と Stornettaによって生み出されたもので,タイムスタンプサービスとして利用されています.

タイムスタンプサービスでは,タイムスタンプサーバーがドキュメントを集め,ハッシュチェーンを作り,ハッシュ値を新聞などで公開することで,そのドキュメントの存在していた時刻や改ざんされていないことを保証していました.

引用元: Linked timestamping Wikipedia
上の図によく似た構造になっていますね
NTT データが新聞に載せていたハッシュ値.
参考リンク(※2)より抜粋させていただきました.

Bitcoinは、タイムスタンプサーバーという、ひとりの信頼できる第三者に頼らずに、ハッシュチェーンを作る仕組みであるといえますね.

Bitcoinの持ち主だけが送金できる仕組み

さてコインを送金するために書き込まれるTransactionですが,コインを持っているその人だけが,自分のコインを送るためのTransactionを作れるようでなければいけません.

そのためにデジタル署名を使います.コインを送金するTransactionを作るときは,Transactionにそのコインを受け取る人の公開鍵を記載することで送金相手を指定します.そして,コインを受け取った人が,そのコインを別の誰かに送るときは,Transactionに自分の秘密鍵で署名をつけます.このようにすれば世界中の人たちが署名を検証することで,正当なコインの所有者が,コインを送金したかを確認することができます.

Satoshi Nakamoto論文 "Bitcoin: A Peer to Peer Electronic Cash System”より抜粋

Bitcoinはどこにある?

さて台帳としてのBitcoinはどこにあるのでしょうか.Bitcoin(台帳)は,世界中のコンピュータに記録され,同期を取りながら管理されています.このコンピュータのことをノード(Node)と呼びます.Bitnodes(ビットノーズ)というサイトで,今現在のBitcoinのノードがどこにあるかわかります.

2024年10月06日(日)現在19,034台のノードがBitcoinを管理していることがわかります.


Bitnodesより引用.

世界中といいつつも偏りはありますが,だれか一人が台帳を管理しているわけではないので,半永久的にBitcoinの情報が保持されることが期待できます.

BitcoinにTransactionを書き込むとき

BitcoinにTransactionを新しく書き込み,コインを送金する時は,このノードに「こういうTransactionを書き込んでください」とリクエストを送ります.このリクエストは全ノードにブロードキャストされ,世界中に行きわたります.ノードはリクエストされたTransactionにおかしなところがないか(今までのTransactionの内容と矛盾していないか,署名は正しいかなど)を検証した後,複数のTransactionをひとまとめにして,前回のブロックのハッシュ値と新しいTransactionから,新しいハッシュを計算し,新しいブロックを作ります.今のBitcoinでは4000個のTransactionを1つのブロックにまとめて新しいブロックを作ります.新しいブロックを作ったら,ほかのノードにその情報をブロードキャストします.

さて,これを世界中のノードが一斉に実行したら大変なことになってしまいますよね.そこでBitcoinではProof-of-Workという仕組みを導入しています.

Proof-of-Work

Bitcoinでは新しいブロックを作るときにノードにあえてコストのかかる作業をさせ「作業の証明」を求めます.具体的には,新しいブロックのハッシュ値に条件を課し,条件を見たすナンス(Nonce)という値を探させます.いままで新しいブロックに書き込むハッシュ値は,ひとつ前のブロックのハッシュ値とTransactionから計算する,とお話ししていましたが,じつはハッシュ値を計算する時には,このナンスも入れる必要があるのです.

Satoshi Nakamoto論文 "Bitcoin: A Peer to Peer Electronic Cash System”より抜粋

そして「新しいハッシュ値が条件を満たすようなナンスを探す」という作業をノードに課します.条件というのは,ハッシュ値の先頭に0が$${n}$$個続くというものです.この$${n}$$の値によって作業にかかる時間を調整することができます.Bitcoinでは10分で次のブロックができるように$${n}$$の値が自動調整されます.ハッシュ関数は入力が1bit違うだけでハッシュ値が大きく変わるので,愚直に条件を満たすハッシュ値を得られるまでナンスを変えてハッシュ値を計算していくほかありません.

このような工夫により,一斉に様々なブロックがあちこちのノードで作られることを防ぎ,かつ,きちんと検証されたTransactionがブロックに書き込まれることを促進します.ブロックの内容は世界中のノードによって検証され,おかしなTransactionが含まれていたりすると,そのブロックは破棄されてしまいます.10分かけてナンスを探し出して作ったブロックが破棄されては困るので,ノードはきちんとTransactionを検証することが期待できます.また,次のブロック作成まで10分かかるので,ほかのノードが新しいブロックをしっかり検証する時間もとれるというわけです.

Proof-of-WorkとHashcash

さて,このProof-of-WorkというアイデアもBitcoinのオリジナルではありません.Proof-of-Workは1997年Adam Backによって考案されました(※3).Adam Backは, スパムメール対策として,メール送信時に送信者にProof-of-Work を課すことでスパムメールを送るコストを増やし、スパムメールを抑制するというHashcashというアイデアを思いつきました.個人が一日に何通かメールを送る分には苦にならないけれど,スパムメール発信者が一日に何万通もメールを送ろうと思うと大変…といういい塩梅のProof-of-Workを課す,というところがポイントです.

幸か不幸かHashcashはこの世に普及しませんでしたが,このとき考えられたProof-of-WorkというアイデアがBitcoinでは使われているのです.

Bitcoinのインセンティブ設計

さて,ノードたちが10分間もハッシュ値を計算し続けてまで,新しいブロックを作ってくれるのは何故でしょうか.

Bitcoinでは新しいブロックを作ると,作った人に報酬としてBitcoin(コイン)が与えられるのです.頑張ってナンスを探し出し,コイン(金)を得ることが発掘作業に似ているからか,新しいブロックを作ることをマイニング(Mining)と呼びます.またマイイングする人をマイナー(Miner)と呼びます.

つまり新しいブロックができるたびにコインが増えていくわけですが,そうするとコインの価値自体がだんだん下がってきてしまいそうですよね.そこでBitcoinでは, マイニングで得らえる報酬が21 万ブロック生成される毎に(だいたい 4 年毎に)半減するように設定されています.つまり流通するBitcoinの総量は最初から決まっているというわけです.

引用元:仮想通貨 ビットコイン のマイニングとは?やり方や仕組みを徹底解説 | CRYPTO INSIGHT powered by ダイヤモンド・ザイ

かわりにマイナーにはTransaction Feeというものが支払われます.実はTransactionをブロックに入れてもらえるようノードにリクエストする時はTransaction Feeを設定できるのです.これはコインを送る人がマイナーにTransactionをブロックに入れてもらうために支払う手数料のようなものです.

はじめのうちは新しいコインを支払うことでマイニングをしてもらい,だんだんBitcoinが使われるようになってきたら,今度は手数料でマイニングをしてもらおう,というアイデアです.Bitcoinの人気が出ればノードにリクエストされるTransactionが増えて,手数料を払わないと新しブロックに入れてもらえなくなるので.

ちなみにこのマイニングの報酬が半分になるタイミングは半減期と呼ばれています.半減期が近づくとBitcoinの価格が上昇する傾向があるようです.しかもなぜかEthereumや他の暗号資産までつられて値上がりします.投資家にとってはBitcoinもEthereumもみんな一緒くたなんですかね.

Bitcoinって安全?

さて,みんなで台帳を管理し,鉄壁の守りに見えるBitcoinですが,本当にBitcoinは安全なのでしょうか.ある日突然,Bitcoinが霧散することはないのでしょうか.Bitcoinの安全性に関しては今もなお検証が続いている状況ですが,ここでは良く知られている51%攻撃と,その難しさを紹介しようと思います.

51%攻撃とインセンティブ

51%攻撃とは 悪意のあるノードが、ネットワーク全体のマイニング速度の 51%(50% 以上)を支配し、不正な取引を Bitcoinに書き込む攻撃のことです.2024年の調査によると 51% 攻撃を成功させるためには 200 億ドルかかるそうです!

参考:
ビットコインへの51%攻撃 もはや現実的ではない=コインメトリックスがコストを分析 | Cointelegraph | コインテレグラフ ジャパン
https://jp.cointelegraph.com/news/bitcoin-ethereum-51-percent-attacks-coin-metrics-research

51% 攻撃が成功してしまえば,人々にとってBitcoinは無価値なものになるでしょう.51%攻撃行えるほど Proof-of-Work のためにコストを投じた攻撃者には、 51% 攻撃を仕掛けてビットコインを無価値なものにするインセンティブがないのです.

しかし人々がBitcoinに価値を感じなくなって,マイニングする人が減ってきてしまうと,51% 攻撃はどんどん容易になってしまいます.

常に人々を魅了し,マイニングをさせ,新しいブロックを作り続けないとBitcoinは無価値になってしまうのです

ちなみにサメもずっと泳いでないと息が出来なくて死んでしまうそうです.ということでサメと掛けてブロックチェーンと解く、その心は…

どちらも動き続けないと生きていけないでしょう.

おあとがよろしいようで.

(…すみません…これだけ言いたかったんです…)

まとめ

ということでBitcoinの仕組みの感動ポイント,伝わったでしょうか?Bitcoinは様々な技術の組み合わせの妙といえる,とても面白いものだと思います.もう一つの代表的なブロックチェーンであるEthereumにはEthereumの面白さがあるし,プライバシーの観点でも色々あるのですが,ここではいったん,おしまいにしようと思います.

水族館でサメをみたら,Bitcoinを思い出してくださいね!

参考リンク

(※1)Satoshi Nakamotoの"Bitcoin: A Peer-to-Peer Electronic Cash System"はこちら(https://bitcoin.org/bitcoin.pdf)からダウンロードできます.

 (※2) ブロックチェーンの分野の第一人者,松尾先生のブログです.ブロックチェーンに関わる人は全員読んでるブログだと思います

(※3)Adam Backの"Hashcash- A Denial of Service Counter-Measure"はこちら(http://www.hashcash.org/papers/hashcash.pdf)からダウンロードできます.

(※)タイトルはテッド・チャンの短編集『あなたの人生の物語』に収録されている「地獄とは神の不在なり」のオマージュです.

※アイキャッチ画像はDALL-E3を利用して作成しました.サメに乗るネコです.サメと掛けてブロックチェーンと解く、その心は…どちらも動き続けないと生きていけないでしょう.でした!

この記事が気に入ったらサポートをしてみませんか?