bitFlyer BlockchainのDevメンバーがブロックチェーンや日々の開発について投稿します。

サトシ論文再入門!最先端の研究開発事例のまとめ

bitFlyer Blockchainのテックブログ始めました!

こんにちは、bitFlyer BlockchainのResearch Teamです。
今回、bitFlyer Blockchainのテックブログを立ち上げることになりました。ブロックチェーンの技術に関する情報発信をしていく予定です。

1つ目の企画として「グローバルで行なわれている研究開発事例をわかりやすく解説するシリーズ」を開始します!
ブロックチェーンの研究開発に関する情報のほとんどは、英語で書かれた難しいものが多く、なかなか日本語では情報が入手できません。
そこで、定期的に最新の研究開発事例を日本語で解説していきます。

取り扱ってほしいテーマがあればコメント等でぜひ教えて下さい!

今回の内容

初回の今回は、世界で初めてブロックチェーン技術を提案した、かの有名なサトシナカモト論文と、サトシナカモトモデルのブロックチェーンの様々な課題、そして最近の研究開発の方向性について説明します。

前半はサトシナカモト論文に基づいたブロックチェーンの説明を行なっていますので、知っている方は後半まで読み飛ばしてください!

サトシナカモト論文

論文は、計12個の章で構成されています。
その中から今回は、ブロックチェーンのアイデアの根幹について記述している1章から4章までを解説します。

ちなみに論文はここから閲覧できます。

ブロックチェーンの生まれた背景(論文 第1章)

インターネットでの商取引は、電子取引を処理する信用できる第三者機関としての「金融機関」に頼っているのが現状です。
しかし、信頼に基づくモデルであるがゆえの弱点・課題が存在します。
例えば、我々利用者からすると、金融機関の中でどういった処理・管理がされているのか知る由はありません。日本の銀行ではまずありえないとは思いますが、理論上は、金融機関が残高を不正に操作することが可能です。
逆に金融機関からすると、そうした不正が発生しないように、何重ものセキュリティ対策を行う必要があります。そのためシステムの構築・運用コストが高くついてしまいます。

こうした背景から、サトシナカモトは「第三者機関を介さずに直接取引するためのシステムを構築する」ということを考え、その結果生まれた技術がブロックチェーンです。

サトシナカモトモデルのブロックチェーンにおける主な技術的構成要素(論文 第2〜4章)

難しい…と思われがちなブロックチェーンですが、基本となる技術は次の3つです。

  1. 電子署名を利用した取引
  2. 取引に対する合意形成
  3. P2P分散ネットワーク

電子署名を利用した取引

f:id:yoshijo:20200410174412p:plain

※図はサトシナカモト論文より引用。以下同様。

第三者機関が存在しないブロックチェーンでは、電子取引の正当性の確認を分散的に行う必要があります。ここでいう電子取引とは「AさんからBさんに10000円送金する」というような、取引の方向(誰から誰に)と内容(金額など)を含んだものです。
具体的には次の性質を満たさなければなりません。

  • 取引の実行者を特定できる
  • 不正な取引内容でないことを確認できる
  • 取引が二重支払いでないことを保証できる

そこで、電子署名のチェーンを用いた取引を行うことで、上記性質を満たします。
ブロックチェーンの世界では、取引相手を公開鍵で表現します。*1
つまり、Bさんの公開鍵に対して10000円を送金するわけです。

一方、取引の実行者は、電子署名を用いて特定します。
例えば「Bさんの公開鍵に10000円送金」という取引にAさんの電子署名が付与されていたら、それはすなわち「AさんがBさんに10000円送金する」という取引を示すことになります。

ではこの時、Aさんが10000円持っていることはどのように証明したら良いでしょうか?
それは、Aさんの公開鍵に送られた取引内容を確認すれば証明できます。
例えば、「XさんがAさんの公開鍵に10000円送金する」という取引Tが行なわれていたとしましょう。
この時、Aさんは取引Tに対して電子署名を行うことで、自分が10000円持っていることを証明できます。
電子署名が付与された取引は「使用済み」、一方で付与されていない取引は「使用前」とすることで、取引が二重に利用されることを防ぐこともできます。*2

今回は説明を省略しましたが、実際のブロックチェーンでは、トランザクションは複数の入力と出力を持つことができます。
興味がある方はこちら*3を読んでみてください!

取引に対する合意形成

f:id:yoshijo:20200410182743p:plain

 取引の表現はできたものの、分散環境下では次のような問題が発生する可能性があります。

  • 処理される取引の順番が異なる
  • そもそも把握している取引の内容が異なる

例えば、Aさん、Bさん、Cさんの3人がそれぞれ取引をしています。Aさんは10000円持っており、他の2人の残高は0円です。この時、

  1. AさんはBさんに10000円送金
  2. BさんはCさんに5000円送金

という取引が行なわれたことを考えましょう。
この時、上の取引(2)を行うためには、取引(1)が終了している必要があります。BさんはCさんに送金するための残高が無いためです。

しかしながら、分散環境下では取引の情報が遅れて伝わる、もしくは取引情報が伝わってこない、という事態が発生する可能性があります。
そのため、取引(1)より前に取引(2)の情報が到着する可能性があるのです。
この場合、Bさんは残高が0の状態でCさんに送金を行なっているように見えるため、その取引は受け付けられません。

このような事態を防ぐためには、全員が同じ取引情報を持っていることを保証する必要があります。
これを「取引に対する合意を形成する」といいます。

サトシナカモトのモデルでは、複数の取引をまとめてブロックを形成し*4、ブロック間を連結します。
なお、ブロック内のトランザクションの実行順序を決定づけるために、ブロック内のトランザクションは順序付けされます。
連結には、前のブロックのハッシュ値を利用します。N番目のブロックは、(N-1)番目のブロックのハッシュ値を含むということです。
なお、ブロックのハッシュ値はそのブロックが含む取引などから計算されます*5
こうすることで、取引の順番を決定づけることができます。
「ブロックチェーン」という名前は、このようにブロックが連結していることに由来しています。

誰がブロックを作る?Proof-of-Workの必要性。

ここまででブロック情報の共有はできましたが、では誰がブロックを作成するのでしょうか?
分散環境下では、同時にブロックが作成されたり、あるいは不正なブロックが作られることなどを考えなければなりません。
そこで、サトシナカモトはProof-of-Work(仕事による証明)という手法を利用しています。

ここで「仕事」とはコンピュータの行なった仕事、つまり計算のことです。
各ブロックには、解くために一定程度の計算が必要な問題が自動的に設定されます。その問題を解けた人だけがブロックを作成することができる、というルールを定めます。

計算を行うためには相応の電気代が必要となるため、攻撃者が大金をはたいてまで不正なブロックを作る動機は減少します。
また、問題が同時に解かれる可能性が確率的に小さいような問題設定を行うことで、同時のブロック作成をある程度防ぐことができます。
仮に異なるブロックが同時に作成されてしまったときは、参加者全員でどのブロックを採用するか決定しなければなりません。
その決定は、最も多くの計算資源が費やされたチェーン、つまりはその時点で最も長いチェーンを選択することで行います。

こうした仕組みで、多くの参加者がいる状況下で、取引に対するただ1つの合意形成を行うことを可能にしています。

なお、このままではProof-of-Workの実行者はただ電気代を費やすだけで、何の見返りもありません。
そのため、ブロックチェーンでは報酬を支払うことによって、正しくProof-of-Workを行う実行者の確保を行います。
報酬の決定方法の詳細はこちら*6を読んでみてください!

改ざんや不正に強いブロックチェーン

ブロックチェーンの構造は、改ざんや不正に対する非常に強い耐性を持ちます。

例として、あるブロックが含む取引内容を変更することを考えてみましょう。
上で説明した通り、ブロックの連結はブロックのハッシュ値を利用して行なわれます。
そしてブロックのハッシュ値は、そのブロックが含む取引などから計算がされるのでした。
そのため、取引内容を変更してしまうと、ブロックのハッシュ値も自動的に変更され、結果としてブロックのチェーン構造が崩壊してしまいます。
そのため、取引が改ざんされたとしてもすぐに気づくことが可能です。

なお「最も多くの計算資源が費やされたチェーン」が選択されるというルールがあるため、取引の改ざんを行なった攻撃者は、そのブロックを起点に自分自身でブロックの生成を続けることによって、改ざんされた取引を含むブロックチェーンをあたかも正しいものとすることができます。
しかしこれは現実的に極めて困難です。
攻撃者がブロックを生成する間、正しいブロックチェーンにおいてもどんどんとブロックが連鎖され続けています。
攻撃者が追い越すためには、少なくとも全体の50%を超える計算量を確保し、正しいブロックチェーンよりも速いスピードでチェーンを伸ばす必要があります。
全体の参加者が多ければ多いほど、50%を超える計算量を確保することは難しくなるため、この攻撃が行われる可能性は低くなります。*7 *8

P2P分散ネットワーク

ここまでにも述べてきたように、ブロックチェーンは分散的な仕組みで動いています。
より具体的には、P2Pネットワークを用いて取引・ブロックのやり取りを行なっています。

P2Pネットワークでは一切の上下関係は無く、全ての参加者が対等です。
つまり、取引やブロックの情報は、参加者全員で対等に共有します。
そのため、仮にある程度の参加者が離脱しても、システム全体は稼働し続けることができます。
また、不正な取引を実施しようとしても、一定多数の参加者が正直に振る舞うことで、そのような取引を排除することが可能になります。

ブロックチェーンの活用事例

ここまで説明してきた技術的な仕組みから「ブロックチェーンは、非中央集権的なアーキテクチャであり、改ざんが極めて困難なシステム。またシステムダウンやデータ消失が発生する確率が極めて小さい」という特長を持っていることがご理解頂けるかと思います。

こうした特長に目をつけ、最近では金融分野はもちろんのこと、非金融分野においてもブロックチェーンの活用事例が増えてきています。

弊社では「miyabi」という独自ブロックチェーンを開発していますが、miyabiの活用事例として次のようなものがあります。

 サトシナカモトモデルのブロックチェーンが抱える課題と解決のためのキーワード

多分野へ活用が進むブロックチェーンですが、サトシナカモトモデルのブロックチェーンに関して言えば、次に挙げるような様々な課題が存在しています。
弊社が開発しているmiyabiも、こうした課題の一部を解決しているブロックチェーン技術の1つです。

このシリーズでは、ここで挙げる課題を解決するための様々な研究開発事例を紹介していく予定です。
課題の列挙と同時に、その課題を解決するために用いられる技術・仕組みのキーワードも合わせてまとめます。

  • スループット・レイテンシ・ファイナリティ
    • 課題
      • ブロックサイズとブロック生成時間に制限があるため、bitcoinは秒間あたり最大7つの取引しかできない。
      • bitcoinは10分に1度しか取引が処理されない。
      • チェーンの分岐が発生する可能性があるため、一度処理された取引が無効になる可能性がある。実運用上は、自分の取引を含んだブロックから更に6個以上のブロックが連結されたことを確認してから、取引の確定とする事が多い。つまり取引完了まで1時間もかかる!
    • 解決のためのキーワード
      • Payment/State Channel, サイドチェーン, コンセンサスアルゴリズムの改良, Permissioned Blockchain, DAGなど
  • プライバシー
    • 課題
      • 全ての参加者が同じデータを共有するため、誰がどういった取引を行なったのかが全員に知られてしまう。
    • 解決のためのキーワード
      • ゼロ知識証明、リング署名、MPC(Multi Party Computation)、Coin Mixing など
  • セキュリティ
    • 課題
      • マイニングパワーの集中による取引の改ざん等の不正行為
      • 任意のプログラムを実行可能なブロックチェーン(Ethereumなど)における、プログラムのバグを突いた不正行為
    • 解決のためのキーワード
      • Economic Finality, Formal Verification など
  • 外部データの活用
    • 課題
      • ブロックチェーンにおいて外部データ(例えば為替情報)などを活用しようとした際に、そのデータの信頼性が担保できない。
    • 解決のためのキーワード
      • Decentralized Oracle、 Federated Oracle、TEE(Trust Execution Environment) など
  • 計算資源
    • 課題
      • Proof-of-Workは多くの計算資源を必要とする。
      • ブロック情報を格納するためのストレージも必要(bitcoinの場合、2020年4月1日時点で約270GB)。
    • 解決のためのキーワード
      • Proof-of-Stakeとその派生系, SPV(Simple Payment Verification) など
  • プロトコルアップデート
    • 課題
      • 全ての参加者が同じプロトコルに従って動く必要がある。つまり、プロトコルアップデートを行う時には、全ての参加者が同じタイミングでプロトコルを切り替える必要がある。
      • プロトコルの切り替えに合意しない参加者が多数いると、bitcoin, bitcoin cashのようにブロックチェーンが分裂することがある
    • 解決のためのキーワード
      • オンチェーンガバナンス、インセンティブ設計 など
  • ユーザエクスペリエンス
    • 課題
      • 中央管理者がいないため、自分の資産は自分で保護する必要がある。一切の保証はない。
      • 「秘密鍵を用いた電子署名」が自分の資産を主張するための唯一の方法。そのため秘密鍵を紛失するとその資産は戻ってこない。秘密鍵が流出すると資産を盗まれる可能性がある。
    • 解決のためのキーワード
      • 秘密分散、マルチシグ、FIDO など
  • 相互運用性
    • 課題
      • 上記課題を解決するために、Bitcoin Cash、Ethereum、Liskなど、様々なブロックチェーンが開発されているが、相互運用性がない。そのため、各ブロックチェーンのトークンを交換するには、中央集権取引所を使用する必要があるが、非中央集権性を目指しているブロックチェーンの思想とは反する仕組みが必要になってしまう。
    • 解決のためのキーワード
      • Polkadot、Cosmos、DEX など

おわりに

サトシナカモト論文をもとに、ブロックチェーンの生まれた背景と、技術的な特長を説明してきました。
また、様々な課題があることを指摘し、同時にそれら課題を解決するために用いられる技術・仕組みのキーワードを紹介しました。

ブロックチェーンをより多くの事例に応用するため、課題を解決するための研究開発が世界中で行なわれています。
この連載では、そうしたブロックチェーンの研究開発の動向・紹介を行なっていきますので、楽しみにしていてください!

またbitFlyer Blockchainではブロックチェーンエンジニアを絶賛採用中です!!
エンジニアチームはメンバー間のコミュニケーションを英語で行うなど様々な国籍のメンバーで構成されるチームでお互いに協力をしながら、個々人が自発的に情熱をもって仕事に取り組んでいます。
ご興味ある方は、下記のリンクをぜひご覧ください!

bitFlyer Blockchainがブロックチェーンエンジニアを募集!

*1:正確には公開鍵のハッシュ値ですが、ここでは話を簡単にするために公開鍵であるとして話を進めます。

*2:このように取引を表現するモデルをUTXOモデルといいます。

*3:これまでの説明では10000円単位でしか取引を行うことができないため非常に不便です。これを解決するために、実際のブロックチェーンでは、取引は複数の入力と出力を持ちます。例えば、Aさんが行うある取引Tは入力として{X→Aに10000円送金、Y→Aに2000円送金, Z→Aに3000円送金}という3つの取引を含んでいるとします。これによりこの取引Tでは合計15000円(10000+2000+3000)を扱うことができます。一方、取引Tの出力として{Bに3000円, Cに12000円}という2つの取引を含んでいるとします。これにより、取引TはBとCにそれぞれ3000円, 12000円を送金します。出力値、つまり送金額の合計が、入力の合計値以下であれば、取引Tは正しい取引となります。入力値の合計 < 送金額合計であれば、その取引は無効です。入力値の合計 > 送金額の合計のとき、差分は手数料としてマイナーに割り当てられます。また、この取引Tの結果を利用して、Bさんが取引Uを行う時には、取引Uの入力として{取引Tの1番目の出力}を指定します。こうすることで、取引の中のどの出力が使われているか判定することができるため、二重支払いを防ぐことが可能になります。

*4:ブロックを作るのはデータ交換の効率を高めるためです。実際に、ブロックを作らず、取引の単位でブロックをチェーン…というよりか取引チェーンを作るようなモデルもありますが、この話はまたどこかで。。。

*5:より正確には、ブロックヘッダのハッシュ値です。ブロックヘッダは、プロトコルバージョン、前のブロックのハッシュ値、マークルルート、タイムスタンプ、Difficulty Target、ナンスからなります。マークルルートは、そのブロックが含む全てのトランザクションから構成されるマークルツリーのルートの値です。そのため、あるトランザクションが変更されると、マークルルートの値も変更され、最終的にはブロックのハッシュ値も変化します。

*6:例えばbitcoinの場合には、ブロックの作成者に対して固定額の報酬を手数料は支払います。固定額の報酬を受け取るトランザクションはコインベースと呼ばれます。報酬額はbitcoinのプロトコルで定義されており、時間とともに減少します。この記事の執筆時にはブロックあたり12.5BTCの報酬が支払われることになっていますが、まもなく半分の6.25BTCに減少してしまいます(これが半減期と呼ばれるものです)。一方、手数料は、ブロックの中に含まれる各トランザクションの「入力値の合計-出力値の合計」の合計になります。例えば、入力の合計が1000円、出力の合計が900円のとき、その取引の手数料は100円です。ブロック作成者からすると、手数料が高い取引のほうが利益が大きくなります。そのため、高い手数料を払うと、その取引は素早くブロックに含まれるようになるため、結果として素早く取引が処理されるようになります。

*7:ただし可能性は0ではありません。bitcoinでは多くの計算量が注ぎ込まれているため、一人で50%を超える計算量を確保することは難しいですが、規模が小さなブロックチェーンにおいては容易に確保することができる場合があります。この場合、そのブロックチェーンは、攻撃者による取引の改ざんが可能になってしまいます。これは51%攻撃と呼ばれます。

*8:別の観点として経済合理性が挙げられます。50%を超える計算量を確保するには、計算資源への初期投資費用と維持費用が必要となります。それだけの費用がかかるため、正しくブロックを生成し、その見返りとして報酬を受け取るほうが経済的に合理的な振る舞いと言えます。