🤔

Web3(というかBitcoin?)完全に理解した

2022/08/11に公開

もしかしなくても

ダニング・クルーガー効果

はじめに

いちばんやさしいなんちゃらが炎上しているのを横目で見ながら、確かにあれがおかしいのは分かるがちゃんと説明しろと言われたらわからん...となったので、BlockChain,Bitcoin周りを勉強しつつまとめたメモです。

Web3といいつつ、ほぼプリミティブなBitcoinだけの話となっていると思いますが、Web3の定義は言ったもん勝ちという噂を聞くので大丈夫でしょう。

上記の通り素人なので、可能な限り裏取りとか理解しながら注意して書いていますが、多分間違いがあります。
特に以下については非常に多くの間違い等があるものと思います。

  • hogeコインではその実装になっていない(過大に見積もってもBitcoin,Etheriumの基礎しか見ておらず、Altの実装とかはわかりません)
  • 最近の技術 (論文読んでるわけではないので情報が古いと思います。特に本稿で制約としていることが今では制約でない可能性など)

詳しい人はマサカリ投げて行ってください。

用語注意

意味がfuzzyだなと思ったもので気づいたものをここにまとめておきます。

  • 参加者 : ブロックチェーンを利用する人の意味で使っています。企業間、個人間、サーバ間などありとあらゆるP2Pの取引を想定できる場合では参加者は必ずしも人では無いと思いますが、指示語が難しかったりするため、参加者は人であるという前提で進めています。
  • トランザクション : BlockChain上での取引の電子的な記録及びそれに伴う通信をトランザクションと記載します。
  • 取引 : トランザクションはBlockChain上での話に焦点をあてる一方、取引は現実世界での授受なども含むより抽象的な行動を意図しています。

BlockChainとは

何をするものなのか

私の理解では、"取引"を記録する手法/記録しているデータベース?の一つです。

ここで言う"取引"とは、単なる金銭の授受以外に、金銭と物の交換など、Participant間で資産の移動が伴うすべてのやりとりを指しています。

金銭の授受に絞ってイメージすると、銀行通帳のようなものでしょうか。
各個人の「入金〇〇円、出金△△円」のような記録を積み重ねればその人の口座残高が計算できるのと同じで、ある人に関するBlockChain上での取引記録を通算すれば、ある参加者の口座にいくら残高があるかを確認することができます。

銀行通帳は当人に関係のある取引だけが抜粋された物ですが、BlockChainでの記録は全ての(そのBlockChainに参加している)人に全ての履歴がオープンな形で記録されている点が違いです。

当然ですが、記録された取引は正しい(=改ざんされていない、本人が意図した取引である、二重送金等もない etc)ものである必要があります。
銀行の場合は、銀行(中央集権の中枢)がその取引が正しいことを証明しています。
BlockChainは、従来中央集権的に行なっていた、取引が"正しい"ことの確認と記録を、不特定多数の参加者だけのコミュニティでも実行できるようにする仕組み・手法の1つです。

どうやってやるのか

  1. 電子署名
  2. BlockChain
  3. 非常にゆるやかな整合性
  4. PoW
    の主要4要素によってBlockChainは、不特定多数の参加者コミュニティで取引が正しいことを確認しています。

電子署名による1トランザクションの正当性確認

単体のトランザクションは電子署名によって、"本当にその資産を持っているParticipantから送信されたのか?"が検証されます。資産という抽象論だと"残高"などの用語が使いにくくて困るので、一旦通貨として以下話を進めます。

bitcoinのwhite paperの図がなんだかわかりにくくて少し不安になりますが、基本はただの電子署名なので、

bitcoinのwhite paperよりbitcoinのwhite paperより

  1. すでに検証済みの、自分の口座への入金トランザクションを残高として取引開始。(トランザクションには送金先口座が含まれているため、自分への入金かどうかが確認できる。図のVerifyのところ)
  2. 送金内容(次の持ち主の口座番号等)+署名+送信元の公開鍵を1トランザクションとして登録。(図のSignのところ)
  3. 送信元Participantの公開鍵で署名を検証し、確かに送信元自身による取引登録だとわかる。

の手順で"本当にその資産を持っているParticipantから送信されたのか?"の確認が実施されます。
また、手順2で取引内容に含む送信先情報を、送信相手の公開鍵のhash値などにすれば、公開鍵(口座番号、署名検証)と秘密鍵(署名用)のペアだけで取引を記述することができます。
この署名プロセスでは、(鍵が盗まれない限りは)少なくとも他のParticipantに勝手に自分の資産が引き出されてしまう・盗まれてしまうことを防止することができます。

ところが、この確認だけでは"送信元Participantが不正をしていないか?"については確認することができません。不正の中には、単純な入力Verifyで防げるような無効な口座への送信などもありますが、比較的防ぐのが難しいものとして、"二重支払い問題"があります。

単一のデータベースに集約してリアルタイムで整合性を保つ場合と比べて、不特定多数の参加者によって正当性を確認するBlockChainでは、ただ単に過去の取引履歴が届いてないだけ等々の理由で"二重支払いに見える"取引は発生しうるため、厄介な問題です。

BlockChainとは最早技術それ自体というよりは暗号通貨を指す名前のようになっている気もしますが、本来的には上記の二重支払いを防ぐ仕組みを指します。
この時に、非常に緩やかな整合性を許容しています。

公開鍵暗号についての蛇足。

電子署名には楕円曲線暗号が利用されているようです。
この記事を書いている間に脱線して楕円曲線暗号についても記事書いたので良ければ見てください。
https://zenn.dev/mosamosa/articles/8fb05531bf97e1

BlockChainによるタイムスタンプと二重払い防止

二重払いを防ぐためには、
電子署名による取引はその取引の内容だけを改ざんするのは難しいですが、取引丸ごと消さるのを防ぐことはできないため、

  1. 現時点で2重払いになるような取引が過去に存在していないこと
  2. 後から過去のデータを改ざんされないこと。

の二つが必要です。1についてはソフトウェアで都度チェックすれば十分達成可能です。
残る2を達成するためにBitCoinはブロックチェーンを利用しています。

BlockChainは、要はハッシュチェーンです。ある取引のハッシュ値を次の取引のハッシュ値を計算する際に利用するようにすると、

このような図になります。こうなると例えば取引1を改ざんしようとすると、芋づる式にその先の取引まですべて改ざんしないとつじつまが合わないことになります。
即ち、ハッシュチェーンの鎖が伸びれば伸びるほど過去のデータは改ざんしにくくなりますし、またハッシュチェーンによってデータの時系列も保証することができます。

ブロックチェーンでは、このハッシュチェーンを木構造にしてその木構造一塊を”ブロック”としてブロック自体もつなげていくためブロックチェーンとのことです。


https://ja.wikipedia.org/wiki/ハッシュ木

PoWによるハッシュチェーンの正当性維持

実は前段のハッシュチェーンや、ハッシュ木(マークルツリー)は特にビットコインで初めて導入された概念ではありません。
例えば、順序や改ざん防止のためにハッシュチェーンを利用するという考え方はリンキング方式
タイムスタンプとしてビットコイン以前に規格化されています。

ただし、リンキング方式タイムスタンプの時点では、次のブロックのrootとなるハッシュ値自体が改竄されないことは保証しなくてはならず、その部分は中央集権的な組織が担うことになっていました。(例えば新聞にrootとなるハッシュ値を掲載するなど。こうすると全世界の新聞を書き換えるのは実質不可能になるため)

ビットコインの新規性はここを分散システムでもできるようにしたことによります。
それがPoWです。

PoWの詳細は割愛しますが、ざっくり言うとある次のブロックのrootとなるハッシュを生成するのにある程度の(コンピュータでの計算上)労力が必要となるという仕組みです。
また、このWorkはくじ引きを引き続けるようなものであり、計算力が小さい人にも一定確率で次のブロックのハッシュ生成者となりうるようになっています。

そのうえで、「一番長く伸びたチェーンが正当な取引履歴である」という決まりを設けます。

  1. 取引を承認する人は確率的に分散するので、その状況で(多くの)正当な参加者を出し抜いてチェーンを伸ばし、取引を改ざんするには非常な計算力がいる(51%攻撃)
  2. 取引の承認でbitcoinを得ることができるようにすると、bitcoinの価値はbitcoinネットワークの信頼性によるので不正をして得たbitcoinの価値を毀損するのはわりに合わない。

となるため、中央集権的な組織なしでもハッシュチェーンが安全に保たれます。
(この辺りは実際あらゆる脆弱性を耐えるかは未証明ですが)

スマートコントラクト

ここまで取引はすべてお金の取引としてあつかってきましたが、Etheriumなどでは”取引関数”自体をブロックチェーンに登録できるようにしています。

ブロックチェーンにアプリを登録し、その登録したアプリIDとインプットデータを与えるとブロックチェーンの枠組みで正当性が確認され登録されるという仕組みを作ることができます。
これがスマートコントラクトと呼ばれているものです。

(なぜかこれを指してブロックチェーンはOSとか言われている気がしますが、登録されたアプリの実行自体はブロックチェーンホストとなる既存のOSで実行されているのでブロックチェーンはOSではないと思っています)

ブロックチェーンの課題

スケーラビリティ

ブロックチェーンでは、PoWの難易度を調整してブロックの生成速度が一定になるように調整しています。しかし、これには以下の問題があります。

  1. 生成時間を短くするとセキュリティが低下する(2連生成などの試行回数が稼げるため)
  2. 生成時間を長くすると、ブロックサイズの制限上取引のスケーラビリティが低い。

スケーラビリティの対処としてライトニングネットワークという、少額はビットコイン外で取引してある程度たまったらビットコインに乗せるというものが提案されています。
が、ライトニングネットワーク自体は中央集権的に運営されるため、そうまでしてBlockChainを運用するべきか?と言われるとなんとも言い難いと思います。

(実質的には)中央集権化

ブロックチェーンは確かに取引自体は分散システムで実行されていますが、ブロックチェーンに関連するソフトウェア自体の開発はある種中央集権的になっています。(Etherium等は明らかにそう)

開発が中央集権となっている以上、例えばある時から○○な人は取引できませんといった規制をかけることも可能ではあり、今のプラットフォーマービジネスとの分かれ目はそこまではっきりしていないように思えます。

また、その中央集権的開発集団の仲たがい等でチェーンが分岐してしまう(BitcoinとBitcoin Cashのように)ということも起こりえます。もちろん従来のプラットフォーマーでも同じことが起きる可能性はありますが、法人として縛りを受けているプラットフォーマーの場合はある程度ソフトランディングするように気を使うことが期待できる側面がある一方、コミュニティであるブロックチェーン周りには期待できない場合も多いと考えます。

暗号の危殆化

ブロックチェーンはセキュリティのほぼすべてを暗号技術に依拠しています。
今の中央集権的なシステムは、権限管理、データセンタの物理セキュリティ等々多層に守られていることを考えるとかなり一点突破気味のセキュリティと思います。

このような事情のため、計算機の進歩などにより現在使用している暗号技術が簡単に破られるようになると、それだけでほぼすべての前提が崩れてしまうという問題があります。

公開性と匿名性のトレードオフ

ブロックチェーンに刻まれた取引履歴はすべてが公開されます。そのため以下のようなトレードオフが生じます。

  • 匿名性を高くすると犯罪などに利用される可能性が高くなる。
  • 匿名性が低いまま公開ブロックチェーンにすると、個人間のやり取りすら追跡できる可能性があり、またそれを削除するのも著しく困難なためプライバシーの問題が生じうる。
  • 非公開ブロックチェーンにすればプライバシーの問題は解決するが、参加認証を実施するために結局中央集権的な場所が必要になる。

計算電力問題

PoWによる計算電力はブロックチェーンが多くの人に使われるほど大きくなりSDGsだなんだが叫ばれる昨今では問題となっています。
この対策として、「ブロックチェーンの取引承認にコストを投下する人はブロックチェーンの価値を損なうインセンティブが無い」という意味である程度同等なPoS(トークンを多く持っている人に優先的に取引承認を割り振る)というものがあるようですが、次のような問題があるように思います。

  • 富める者がより富む構造
  • コインを保持しつづけることにメリットが出るため流動性が低下する。

あまり根本的な解決ではなさそうです。

Web3とは

長かった...
Web3は原典はEtheriumの共同創始者Gavin Wood氏の2014年のBlogのようです。
https://gavwood.com/dappsweb3.html

ざっくり要約は以下。

  • スノーデン事件(アメリカがプラットフォーマーの協力を得て通信を傍受していたことが判明した事件)
  • SMTPとかHTTPとかはいろんな便利なアプリを生み出したけど、↑の現代の我々と社会の関係性に対応できるような新しいプロトコルが必要(政府は全く信用できないため)
  • Web3の構成要素には主に4つある。静的コンテンツの配布, 動的なメッセージング, トラストレスなトランザクションそして統合されたユーザインタフェース。
  • 1つめはBitTorrentのような分散ファイル交換システム
  • 2つ目はデジタル署名に基づく匿名なメッセージング
  • 3つ目は契約を履行するためのコンセンサスシステム
  • 4つ目は上記を使うためのブラウザ
  • 1つ目によって我々は公開したい情報を公開し、2つ目によって秘密にしたい情報は秘密に出来るし、3つ目によって契約を公的に履行することもできる。

とのことです。BlockChainの担務はせいぜい3だけに過ぎないということですね。

ただし、Wikipedia(https://ja.wikipedia.org/wiki/Web3)の記載の限りでは今のバズワードと化しているWeb3はGavin Wood氏の定義とはまた変わってきているようです。
もう何もわからん。
逆に言えば構成要素の技術的裏付けと限界を理解して、その人が考えているWeb3とは何か?本当に実現可能でメリットがあるものなのか?を見極めていくしかなさそうですね。

また、4つ目の構成要素の到来も当分先のようです。
(Braveがそうなのかなと昔は思っていましたが、ベースがChromiumである以上この定義には当てはまらなそうです)

個人的なWeb3への懐疑

ざっくり言うと
そこまで高い匿名性を実現することで本当に幸せになるのか?
ある意味では警察機能の放棄であり、総合的な幸福度は低下する可能性がある。
そこまで高い匿名性や分散性がいらないなら、ブロックチェーンの優位性はそこまでない。
です。

  • Gavin Wood氏はあまりにも政府への疑いを強く持ちすぎているような気がする。確かに通信傍受は問題ではあるが、多くの国(特に通信傍受をやりきることができるほどの先進国では)選挙によって対応することができるはずである。
  • 中央集権は行き過ぎると問題だが一方で治安を維持する装置でもある。そのトレードオフについて議論するのが先決ではないか。
  • 完全なP2Pの統制には懸念がある。例えば現在は違法コンテンツのアップロードなどは(限度はあれど)事業者のサーバ停止などで対応できるが、誹謗中傷、名誉棄損、プライバシー侵害(e.g.リベンジポルノなども含む)が統制できないP2Pの世界は本当に幸福なのか?
  • 物理層の通信についてGavin Wood氏のblogの中でも何となくは触れられていたが正直あまりうまくいく気はしない。置き換えが非常に困難なこともあり、IP以下のレイヤーはそのまま残らざるを得ないのではないか。
  • たとえWeb3の世界が実現したところで、自分が政府など中央集権寄りの人間であればその開発コミュニティを掌握することで最終的に統制しようとすると思うため、あまり問題は解決しないと思われる。

おわりに

Web3について全然具体的な話が無くてWeb3の分量めっちゃ減っちゃった...

参考

(本文中に引用したもの以外)
https://bitcoin.org/bitcoin.pdf
https://book.ethereum-jp.net/
https://www.amazon.co.jp/dp/B078K9B8M1/
https://www.jssec.org/dl/20170710_03_urushima.pdf
https://www.ogis-ri.co.jp/otc/hiroba/technical/bitcoinpaper/part1.html

Discussion